成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

laravel框架應(yīng)用和composer擴(kuò)展包開發(fā)

shevy / 2356人閱讀

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

laravel5.5+

laravel官方地址

laravel是目前最流行的php框架,發(fā)展勢(shì)頭迅猛,應(yīng)用非常廣泛,有豐富的擴(kuò)展包可以應(yīng)付你能想到的各種應(yīng)用場(chǎng)景,laravel框架思想前衛(wèi),跟隨時(shí)代潮流,提倡優(yōu)雅代碼,自稱為“web工匠”,其中的route、blade模板引擎、console、容器以及composer擴(kuò)展包為業(yè)務(wù)的開發(fā)提供了極大的便利。

國(guó)內(nèi)目前已經(jīng)有眾多的laravel社區(qū),比如

laravel-china

golaravel

laravelacademy

當(dāng)然還有更多可供開發(fā)者學(xué)習(xí)和交流的網(wǎng)站,可以自行google或者百度。

不過(guò)如果看文檔的話,建議查看英文網(wǎng)站官網(wǎng)(如果英語(yǔ)允許的話),官網(wǎng)也有一個(gè)對(duì)應(yīng)的社區(qū),供開發(fā)者問(wèn)答,不過(guò)貌似沒有那么活躍,提問(wèn)題的話也需要有一定的英文基礎(chǔ),至少可以看懂stackoverflow上的問(wèn)答。

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

本教程可以讓你在短時(shí)間內(nèi)按照123步驟完成一個(gè)網(wǎng)站的應(yīng)用,貫穿laravel各個(gè)層級(jí),對(duì)于一個(gè)剛接觸該框架的開發(fā)者來(lái)說(shuō),先應(yīng)用,后深入,這也是登堂入室的學(xué)習(xí)方式,何樂(lè)而不為呢?

Ok, Here we go!!! 前期準(zhǔn)備

安裝php7(最好加入環(huán)境變量)??梢陨瞎倬W(wǎng)或者軟件包管理工具安裝,例如: brew install php7

安裝composer

安裝mysql

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

Hi Sunday.

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

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

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

@if ($name )

{{$name}},你好

@else

無(wú)名氏,你好

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

    以上的步驟,僅僅是完成了從路由到視圖的簡(jiǎn)單處理,下面看一下數(shù)據(jù)模型,Model

    13. 配置數(shù)據(jù)庫(kù)

    database.php

    // config/database.php
        "mysql" => [
            "driver" => "mysql",
            "host" => env("DB_HOST", "127.0.0.1"), // 主機(jī)
            "port" => env("DB_PORT", "3306"), // 端口
            "database" => env("DB_DATABASE", "forge"), // 這里需要配置你的數(shù)據(jù)庫(kù)
            "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 #這里需要你手動(dòng)在數(shù)據(jù)庫(kù)創(chuàng)建一下數(shù)據(jù)庫(kù)
    DB_USERNAME=root #你自己的用戶名
    DB_PASSWORD=pwd #你自己的密碼
    14. 運(yùn)行artisan命令 php artisan make:auth
    15. 運(yùn)行artisan命令 php artisan make:migration 創(chuàng)建user表和密碼表,進(jìn)入你的數(shù)據(jù)庫(kù)中查看是否創(chuàng)建成功
    16. 這時(shí),打開網(wǎng)站首頁(yè),你會(huì)看到有一個(gè)登錄標(biāo)志,當(dāng)你注冊(cè)成功之后,你會(huì)看到user表中多了一條數(shù)據(jù),表示數(shù)據(jù)庫(kù)連接是成功的。
    model可以通過(guò)php artisan make:model TestModel來(lái)創(chuàng)建,如果你沒有特殊要求的話,它會(huì)出現(xiàn)在app目錄下。
    進(jìn)入該Model你會(huì)看到它繼承了一個(gè)EloquentModel,這個(gè)ORM model可以為你提供多種多樣的CURD方法,具體可見文檔,在Model里面需要自定義一些屬性,例如table、fillable、guards等,支持軟刪除use SoftDeletes,但對(duì)應(yīng)表中必須要有deleted_at字段。
    你也可以用DB匿名類或者app("db")來(lái)得到一個(gè)比EloquentModel更加原始的模型對(duì)象,這會(huì)讓你對(duì)數(shù)據(jù)庫(kù)的操作更加原生,詳見 文檔
    以上就是對(duì)應(yīng)的MVC使用的簡(jiǎn)單介紹
    下面,讓我們看看console的使用

    終端進(jìn)入項(xiàng)目目錄,運(yùn)行php artisan可以查看所有可執(zhí)行命令

    運(yùn)行 php artisan route:list可以查看已成功注冊(cè)的路由列表

    php artisan make:command NewCommand創(chuàng)建一個(gè)新的命令

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

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

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

    如果你想要加入定時(shí)任務(wù),可以將命令加在schedule()中, $schedule->cron("0 0 0 0 0")這里填寫crontab的格式。
    你可以運(yùn)行php artisan schedule:run來(lái)執(zhí)行定時(shí)任務(wù)
    laravel會(huì)在你項(xiàng)目維護(hù)或迭代時(shí)自動(dòng)完成定時(shí)任務(wù)的重啟
    composer擴(kuò)展包

    如果你有心,當(dāng)你創(chuàng)建一個(gè)laravel項(xiàng)目的時(shí)候,就會(huì)注意到,composer會(huì)在項(xiàng)目中創(chuàng)建一個(gè)vendor目錄,這個(gè)目錄下保存著各式各樣的擴(kuò)展包,如:laravel/framework、symphony/console、monolog/monolog等,這些擴(kuò)展包是laravel的寶庫(kù),為你的開發(fā)提供了極大便利。

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

    如何開發(fā)一個(gè)composer擴(kuò)展包呢?

    1.新建目錄test,進(jìn)入運(yùn)行 composer init

    這里type一般選擇project/library,license一般選擇MIT協(xié)議(一種開源授權(quán)協(xié)議)

    2.打開composer.json,加入psr4規(guī)則:

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

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

    
    

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

    
    

    我們也可以創(chuàng)建一個(gè)更深層次的目錄,如Handlers,在其下創(chuàng)建一個(gè)TestYou.php:

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

    創(chuàng)建一個(gè)匿名類Facades/Test.php:

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

    材料已準(zhǔn)備完畢,下面開始切菜:

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

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

    后語(yǔ)

    本文由于初次編寫,必然有諸多不合理之處,希望讀者們多多給出優(yōu)化意見,以后在文章中會(huì)考慮到,大家共同成長(zhǎng),一起發(fā)財(cái)。

    stay hungry, stay foolish.

    文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

    轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/29061.html

    相關(guān)文章

    • 使用 Laravel 框架開發(fā)是什么樣的體驗(yàn)

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

      Miracle_lihb 評(píng)論0 收藏0
    • 剛接觸一個(gè) Laravel 項(xiàng)目,你可以從這些地方入手

      摘要:在每一個(gè)的項(xiàng)目主頁(yè)上,展示了擴(kuò)展包的介紹版本號(hào)倉(cāng)庫(kù)地址如完整的文件,以及其他一些有用的信息。官方文檔給出了總結(jié)服務(wù)提供者是所有應(yīng)用程序引導(dǎo)中心。你可以瀏覽位于目錄下的所有應(yīng)用程序服務(wù)提供者。 當(dāng)你接手一個(gè)新項(xiàng)目的時(shí)候,可能會(huì)感到無(wú)從下手,如果不熟悉編程,則更是如此。那么,我們?cè)搹哪膬喝胧帜???xiàng)目代碼的哪些部分我們需要著重了解?下面我們看看 Laravel 項(xiàng)目的幾個(gè)通用的部分。 項(xiàng)目文...

      ranwu 評(píng)論0 收藏0
    • 剛接觸一個(gè) Laravel 項(xiàng)目,你可以從這些地方入手

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

      RyanQ 評(píng)論0 收藏0
    • 如何正確使用 Composer 安裝 Laravel 擴(kuò)展

      摘要:流程一新項(xiàng)目流程創(chuàng)建,并添加依賴到的擴(kuò)展包運(yùn)行,安裝擴(kuò)展包并生成提交到代碼版本控制器中,如流程二項(xiàng)目協(xié)作者安裝現(xiàn)有項(xiàng)目克隆項(xiàng)目后,根目錄下直接運(yùn)行從中安裝指定版本的擴(kuò)展包以及其依賴此流程適用于生產(chǎn)環(huán)境代碼的部署。 本文經(jīng)授權(quán)轉(zhuǎn)自 PHPHub 社區(qū) 問(wèn)題說(shuō)明 我們經(jīng)常要往現(xiàn)有的項(xiàng)目中添加擴(kuò)展包,有時(shí)候因?yàn)槲臋n的錯(cuò)誤引導(dǎo),如下圖來(lái)自 這個(gè)文檔 的: showImg(https://dn-...

      BlackMass 評(píng)論0 收藏0
    • laravel開發(fā)擴(kuò)展記錄

      摘要:自動(dòng)代碼擴(kuò)展開發(fā)時(shí)遵守的代碼風(fēng)格是項(xiàng)目開發(fā)規(guī)范。遵照此規(guī)范,在實(shí)際操作中,有許多重復(fù),接下來(lái)推薦一款專為此規(guī)范量身定制的代碼生成器??梢岳么藬U(kuò)展來(lái)快速構(gòu)建項(xiàng)目原型。后續(xù)還會(huì)為大家?guī)?lái)一些最新的技術(shù)擴(kuò)展。 whoops 錯(cuò)誤提示擴(kuò)展 whoops 是一個(gè)非常優(yōu)秀的 PHP Debug 擴(kuò)展,它能夠使你在開發(fā)中快速定位出錯(cuò)的位置。laravel默認(rèn)安裝。showImg(https://s...

      fancyLuo 評(píng)論0 收藏0

    發(fā)表評(píng)論

    0條評(píng)論

    shevy

    |高級(jí)講師

    TA的文章

    閱讀更多
    最新活動(dòng)
    閱讀需要支付1元查看
    <