国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

laravel框架應用和composer擴展包開發

shevy / 2329人閱讀

摘要:官方地址是目前最流行的框架,發展勢頭迅猛,應用非常廣泛,有豐富的擴展包可以應付你能想到的各種應用場景,框架思想前衛,跟隨時代潮流,提倡優雅代碼,自稱為工匠,其中的模板引擎容器以及擴展包為業務的開發提供了極大的便利。

laravel5.5+

laravel官方地址

laravel是目前最流行的php框架,發展勢頭迅猛,應用非常廣泛,有豐富的擴展包可以應付你能想到的各種應用場景,laravel框架思想前衛,跟隨時代潮流,提倡優雅代碼,自稱為“web工匠”,其中的routeblade模板引擎、console、容器以及composer擴展包為業務的開發提供了極大的便利。

國內目前已經有眾多的laravel社區,比如

laravel-china

golaravel

laravelacademy

當然還有更多可供開發者學習和交流的網站,可以自行google或者百度。

不過如果看文檔的話,建議查看英文網站官網(如果英語允許的話),官網也有一個對應的社區,供開發者問答,不過貌似沒有那么活躍,提問題的話也需要有一定的英文基礎,至少可以看懂stackoverflow上的問答。

言歸正傳,這里會介紹一下laravel5.5的簡易上手教程,如果你需要理解laravel框架整體的設計和實現原理的話,MVC、設計模式(尤其是工廠模式)、路由、管道、容器、控制反轉、依賴注入等都是必須要理解的,這里并不深入探討,否則本作者寶寶就要吐血寫個系列了,想想都覺著累(經常加班啊沒時間啦!)。

本教程可以讓你在短時間內按照123步驟完成一個網站的應用,貫穿laravel各個層級,對于一個剛接觸該框架的開發者來說,先應用,后深入,這也是登堂入室的學習方式,何樂而不為呢?

Ok, Here we go!!! 前期準備

安裝php7(最好加入環境變量)。可以上官網或者軟件包管理工具安裝,例如: brew install php7

安裝composer

安裝mysql

創建laravel項目
1. 終端運行命令
composer create-project laravel/laravel blog
2. 進入blog文件夾,運行
php -S localhost:80 -t public
3. 瀏覽器訪問 http://localhost
4. 運行命令 php artisan
如果3、4步驟運行成功,則一切無礙,可以進行下一步。
5. 利用你的編輯工具,以sublime為例,打開blog項目,Ctrl+P 找到web.php,寫入如下代碼,進行路由注冊:
Route::get("/test", function () {
    return "

Hi Sunday.

"; });
這里簡單解釋一下,路由在routes目錄之下,有三個文件:web.phpconsole.phpchannel.php
其中,web.php是負責網站路由,也就是當php是以http請求的方式運行時才會用到,
console.php是在命令行運行模式下運行artisan命令的,這個后續會講到,
channel.php是廣播消息時會用到,這個本篇略過,需要看的可以查看文檔
gethttp請求方式,路由注冊時也可以用post/put/delete/patch等,laravel-router還提供了便利的restful風格的路由注冊resource方法,可以對后續業務處理增刪改查等。
上述例子為一個匿名函數,其實一般情況下會有路由分組,前綴,中間件(后面會講到),別名,匹配等的鏈式調用:Route::prefix("prefix_example")->middleware(["m_exaple_1","m_example_2"])->group(Route_Closure);
下面給一個完整的示例:
Route::prefix("hi")->middleware(["hi_m"])->namespace("sd")->group(function () {
    Route::post("sunday", "SundayController@sunday")->name("hi.sunday.post");
    Route::put("sunday", "SundayController@sunday")->name("hi.sunday.put");
})
怎么樣?laravel路由的注冊風格是不是非常友好,非常靈活多變?其中Route也可以使用app("router")訪問,app()是一個輔助方法,這個輔助方法在vendorlaravelframeworksrcIlluminateFoundationhelpers.php中,其中也有很多其他好用的輔助方法。app()涉及到容器的思想和facade門面注冊,這里不詳述。
6. 訪問以下剛剛注冊的路由,http://localhost/test
7. 手動在app/Http/Controllers下新建或命令行生成一個控制器:php artisan make:controller sd/SundayController,這時你會看到app/Http/sd下面有一個SundayController.php,將下面的代碼寫入:
    public function sunday()
    {
        return "Hi sunday";
    }
8. web.php注冊路由,并成功訪問:
Route::prefix("hi")->namespace("sd")->group(function () {
    Route::get("sunday", "SundayController@sunday")->name("hi.sunday.get");
})
9. 中間件,運行命令php artisan make:middleware MyMiddleware,會生成一個標準中間件,打開MyMiddleware.php可以看到里面有兩個方法handleterminate
public function handle($request, $next)
{
    // 上面兩個入參,你不用管,這個是laravel路由分發時自動注入的參數,$request是laravel封裝的請求對象,IlluminateHttpRequest,你可以獲取到所有超級變量的數據,也可以獲得對應的一些請求處理方法如session(),getClientIp().
    // 這個方法是在進入Controller之前運行的,目的是對本次請求進行預處理或者校驗等。
    app("log")->info("記錄一個日志");
}

public function terminate($request, $response)
{
    // 這個方法是在請求即將關閉時運行的,可以處理一些響應相關的邏輯。
    app("log")->info("再記錄一下日志");
}
10. 中間件注冊,打開app/Http/Kernel.php ,在$middleware中加入
appHttpMiddlewareMyMiddleware::class
11. 查看 storage/logs/laravel.log(如果你config/app.php配置了日志channeldaily,那么應該看到的是日期格式的文件),里面應該有上一步中記錄的日志信息,以及對應的日志級別,laravel的日志使用monolog,可以使用多種驅動去記錄日志,也可以配置上報策略,實現了loggerinterface接口,符合psr3的規范。
12. 視圖層,在剛剛的方法 SundayController@sunday 中,將返回值改為:
    return view("test.test", ["name" => "sunday", "testArray" => [1,2,3]]);

在前端模板所在目錄 resources/views下建一個目錄test,建一個blade模板test.blade.php,代碼如:

@if ($name )

{{$name}},你好

@else

無名氏,你好

@endif @foreach ($testArray as $testNumber)
  • {{$testNumber}}
  • @endforeach
    在控制器返回視圖時,第一個參數是以.號表示resources/views下的目錄層級的,上面的test.test則表示視圖文件是在test/test.blade.php,第二個參數是一個傳遞給視圖層的數組,里面應當是key => value關聯數組,因為在blade模板引擎中,會直接將對應的key轉化成一個可使用的變量,在返回給視圖之前,如果你定義了視圖綁定,如在ComposerServiceProvider中的boot方法中注冊了對應的視圖綁定的話,那么會先處理這一步,然后再將數據傳給目的文件。
    在這個例子中,test.blade.php得到了參數之后,會通過blade引擎分析模板文件,解析語法,轉化成正常的html文本。
    {{$name}}{!!$name!!}語法相當于,前者為防止xss會過濾掉一些specialchar,后者則會直接輸出文本,不安全。
    @if ... @endif則是條件判斷語句,行后面可以跟一個簡短的php邏輯判斷
    @foreach ... @endforeach 輪詢數組
    其他語法請參考 官方文檔。

    以上的步驟,僅僅是完成了從路由到視圖的簡單處理,下面看一下數據模型,Model

    13. 配置數據庫

    database.php

    // config/database.php
        "mysql" => [
            "driver" => "mysql",
            "host" => env("DB_HOST", "127.0.0.1"), // 主機
            "port" => env("DB_PORT", "3306"), // 端口
            "database" => env("DB_DATABASE", "forge"), // 這里需要配置你的數據庫
            "username" => env("DB_USERNAME", "forge"), // 配置你的用戶名
            "password" => env("DB_PASSWORD", ""), // 密碼
            "unix_socket" => env("DB_SOCKET", ""),
            "charset" => "utf8mb4",
            "collation" => "utf8mb4_unicode_ci",
            "prefix" => "",
            "strict" => true,
            "engine" => null,
        ],
    

    .env

    // .env文件
    DB_HOST=127.0.0.1
    DB_PORT=3306
    DB_DATABASE=test #這里需要你手動在數據庫創建一下數據庫
    DB_USERNAME=root #你自己的用戶名
    DB_PASSWORD=pwd #你自己的密碼
    14. 運行artisan命令 php artisan make:auth
    15. 運行artisan命令 php artisan make:migration 創建user表和密碼表,進入你的數據庫中查看是否創建成功
    16. 這時,打開網站首頁,你會看到有一個登錄標志,當你注冊成功之后,你會看到user表中多了一條數據,表示數據庫連接是成功的。
    model可以通過php artisan make:model TestModel來創建,如果你沒有特殊要求的話,它會出現在app目錄下。
    進入該Model你會看到它繼承了一個EloquentModel,這個ORM model可以為你提供多種多樣的CURD方法,具體可見文檔,在Model里面需要自定義一些屬性,例如table、fillable、guards等,支持軟刪除use SoftDeletes,但對應表中必須要有deleted_at字段。
    你也可以用DB匿名類或者app("db")來得到一個比EloquentModel更加原始的模型對象,這會讓你對數據庫的操作更加原生,詳見 文檔
    以上就是對應的MVC使用的簡單介紹
    下面,讓我們看看console的使用

    終端進入項目目錄,運行php artisan可以查看所有可執行命令

    運行 php artisan route:list可以查看已成功注冊的路由列表

    php artisan make:command NewCommand創建一個新的命令

    打開app/Console/Commands/NewCommand.php,在$signature后定義一個命令的名稱如:test:test {--O|op= : 這是我的測試參數},在handle()方法中寫入你的邏輯。如:

    $this->info("我第一個命令"); // 會在終端上輸出該文本
    $this->error("我的命令錯了"); // 會在終端上輸出該文本
    $this->confirm("確認我的命令?"); // 選擇yes/no
    $this->choice("我還有其他選擇:", ["A", "B"]); // 選擇一個
    $this->output->progress(); //進度條
    echo $this->option("op"); // 獲取所定義參數值

    之后,在app/Console/Kernel.php $commands注冊命令AppConsoleCommandsTestCommand::class,運行php artisan test:test --op=1,成功輸出1,這條命令算是完工了。

    如果你想要加入定時任務,可以將命令加在schedule()中, $schedule->cron("0 0 0 0 0")這里填寫crontab的格式。
    你可以運行php artisan schedule:run來執行定時任務
    laravel會在你項目維護或迭代時自動完成定時任務的重啟
    composer擴展包

    如果你有心,當你創建一個laravel項目的時候,就會注意到,composer會在項目中創建一個vendor目錄,這個目錄下保存著各式各樣的擴展包,如:laravel/framework、symphony/console、monolog/monolog等,這些擴展包是laravel的寶庫,為你的開發提供了極大便利。

    所有的擴展包都需要符合psr4加載規范,通過spl_autoload_register()方法自動加在,composer會生成一個autoload_classmap.php你可以找到所有加載到的類和文件。

    如何開發一個composer擴展包呢?

    1.新建目錄test,進入運行 composer init

    這里type一般選擇project/librarylicense一般選擇MIT協議(一種開源授權協議)

    2.打開composer.json,加入psr4規則:

     "autoload": {
        "psr-4": {
            "Name1Name2": "name/src/Name" // 這里表示按照psr4規范,對于name/src/Name目錄下的所有文件,加載命名空間以Name1Name2為前綴的類。
        }
    }

    3.創建name/src/Name目錄,在Name目錄下創建文件NameServiceProvider.php,代碼如下:

    
    

    由于log_info()這個方法我們沒有定義過,所以可以在helpers.php中進行定義:

    
    

    我們也可以創建一個更深層次的目錄,如Handlers,在其下創建一個TestYou.php:

    namespace Name1Name2Handlers;
    
    class TestYou
    {
        public function test()
        {
            log_info("test");
        }
    }

    創建一個匿名類Facades/Test.php:

    namespace Name1Name2Facades;
    
    use IlluminateSupportFacadesFacade;
    
    class Test extends Facade 
    {
        protected static function getFacadeAccessor()
        {
            return "test";
        }
    }

    材料已準備完畢,下面開始切菜:

    // NameServiceProvider
    
    public function register () 
    {
        $this->app->bind("test", Name1Name2HandlersTestYou::class);
    }
    為什么一定要定義匿名類呢?因為laravel框架本身要求就是少去關注工具類的實現,多關注業務本身,所以所有的sdk或者擴展包都在接入時盡量提供便利,其中$this->app->bind()也體現了一個依賴注入控制反轉的思想,使得定義了匿名類的,可以在config/app.php中注冊相應匿名類TestNameServiceProvider之后可以以極為便利的方式使用,如:Test::test(),或者app("test")->test(),不需要管他們的命名空間。

    上述的擴展包功能已經基本成形,你需要將它放到相應的代碼托管倉庫中,如githubhttps://packagist.org(推薦),你可以嘗試在laravel中使用命令composer require {你的package名字}進行安裝。

    后語

    本文由于初次編寫,必然有諸多不合理之處,希望讀者們多多給出優化意見,以后在文章中會考慮到,大家共同成長,一起發財。

    stay hungry, stay foolish.

    文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

    轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/29061.html

    相關文章

    • 使用 Laravel 框架開發是什么樣的體驗

      摘要:但也因為應有盡有使得框架的性能比其他高性能框架低了些,為此給了幾個解決方案路由緩存經有關部門研究,路由緩存可有效加快訪問速度以上。有朋友說框架最重要的東西是路由,我倒認為最重要的是框架中異于其他框架且能解決痛點的東西,如的。 showImg(https://segmentfault.com/img/remote/1460000006767764); 在程序界的遠古時期,大神們手持鍵盤敲...

      Miracle_lihb 評論0 收藏0
    • 剛接觸一個 Laravel 項目,你可以從這些地方入手

      摘要:在每一個的項目主頁上,展示了擴展包的介紹版本號倉庫地址如完整的文件,以及其他一些有用的信息。官方文檔給出了總結服務提供者是所有應用程序引導中心。你可以瀏覽位于目錄下的所有應用程序服務提供者。 當你接手一個新項目的時候,可能會感到無從下手,如果不熟悉編程,則更是如此。那么,我們該從哪兒入手呢?項目代碼的哪些部分我們需要著重了解?下面我們看看 Laravel 項目的幾個通用的部分。 項目文...

      ranwu 評論0 收藏0
    • 剛接觸一個 Laravel 項目,你可以從這些地方入手

      摘要:在每一個的項目主頁上,展示了擴展包的介紹版本號倉庫地址如完整的文件,以及其他一些有用的信息。官方文檔給出了總結服務提供者是所有應用程序引導中心。你可以瀏覽位于目錄下的所有應用程序服務提供者。 showImg(https://segmentfault.com/img/bV6vPF?w=1200&h=500); 當你接手一個新項目的時候,可能會感到無從下手,如果不熟悉編程,則更是如此。那么...

      RyanQ 評論0 收藏0
    • 如何正確使用 Composer 安裝 Laravel 擴展

      摘要:流程一新項目流程創建,并添加依賴到的擴展包運行,安裝擴展包并生成提交到代碼版本控制器中,如流程二項目協作者安裝現有項目克隆項目后,根目錄下直接運行從中安裝指定版本的擴展包以及其依賴此流程適用于生產環境代碼的部署。 本文經授權轉自 PHPHub 社區 問題說明 我們經常要往現有的項目中添加擴展包,有時候因為文檔的錯誤引導,如下圖來自 這個文檔 的: showImg(https://dn-...

      BlackMass 評論0 收藏0
    • laravel開發擴展記錄

      摘要:自動代碼擴展開發時遵守的代碼風格是項目開發規范。遵照此規范,在實際操作中,有許多重復,接下來推薦一款專為此規范量身定制的代碼生成器。可以利用此擴展來快速構建項目原型。后續還會為大家帶來一些最新的技術擴展。 whoops 錯誤提示擴展 whoops 是一個非常優秀的 PHP Debug 擴展,它能夠使你在開發中快速定位出錯的位置。laravel默認安裝。showImg(https://s...

      fancyLuo 評論0 收藏0

    發表評論

    0條評論

    shevy

    |高級講師

    TA的文章

    閱讀更多
    最新活動
    閱讀需要支付1元查看
    <