摘要:添加路由在方法中,通過下面幾行代碼添加路由注意這個參數(shù),就是將這個文件的內(nèi)容附加在原來路由文件的后面,并不會將原來的路由清零。
學(xué) Laravel 和 Vuejs,你真應(yīng)該來 codecasts.com ,有免費高質(zhì)量視頻!
在 Laravel 5.2 的時候,官方給我們提供了 make:auth 命令,這個命令使得我們在執(zhí)行一條命令的情況下實現(xiàn)用戶注冊和登錄,忘記密碼,找回密碼的過程!本文來看一下 make:auth 的源碼。
源碼在哪還是一樣的,使用編輯器的搜索功能,直接搜索 MakeAuthCommand,你會找到這個文件 IlluminateAuthConsoleMakeAuthCommand,而這些 artisan 的命令,我們關(guān)注的重點就是 fire() 這個方法:
public function fire() { $this->createDirectories(); // other codes ... }1.創(chuàng)建目錄
首先 createDirectories() 創(chuàng)建必要的目錄:
protected function createDirectories() { if (! is_dir(resource_path("views/layouts"))) { mkdir(resource_path("views/layouts"), 0755, true); } if (! is_dir(resource_path("views/auth/passwords"))) { mkdir(resource_path("views/auth/passwords"), 0755, true); } }
這里可以看到此命令會創(chuàng)建兩個文件夾,就是 resources/views/layouts 和 resources/views/auth/password
2.復(fù)制文件有了目錄之后,在 fire() 方法里,createDirectories() 的后面,大概有這樣的一行代碼:
public function fire() { // other codes ... $this->exportViews(); // other codes ... }
那么 exportViews() 做的事情就是復(fù)制文件了:
protected function exportViews() { foreach ($this->views as $key => $value) { if (file_exists(resource_path("views/".$value)) && ! $this->option("force")) { if (! $this->confirm("The [{$value}] view already exists. Do you want to replace it?")) { continue; } } copy( __DIR__."/stubs/make/views/".$key, resource_path("views/".$value) ); } }
首先通過 foreach 檢查要復(fù)制的文件是否存在,不存在的話,直接使用 copy() 復(fù)制文件,這些文件名字的定義在 $this->views 里面:
protected $views = [ "auth/login.stub" => "auth/login.blade.php", "auth/register.stub" => "auth/register.blade.php", "auth/passwords/email.stub" => "auth/passwords/email.blade.php", "auth/passwords/reset.stub" => "auth/passwords/reset.blade.php", "layouts/app.stub" => "layouts/app.blade.php", "home.stub" => "home.blade.php", ];
這個定義就在 MakeAuthCommand 文件里面。然后這里你就可以清楚地看到我們要復(fù)制的視圖文件有哪些了!
3.生成控制器還是在 fire() 方法中,通過下面幾行代碼生成控制器:
file_put_contents( app_path("Http/Controllers/HomeController.php"), $this->compileControllerStub() );
我們來看看 compileControllerStub() 具體怎么實現(xiàn):
protected function compileControllerStub() { return str_replace( "{{namespace}}", $this->getAppNamespace(), file_get_contents(__DIR__."/stubs/make/controllers/HomeController.stub") ); }
可以看到,思路是這樣的:1.獲取原先定義好的控制器文件 --> 2.用 getAppNamespace 替換 {{namespace}} ;這樣我們就可以正確確定控制器的命名空間。
4.添加路由在 fire() 方法中,通過下面幾行代碼添加路由:
file_put_contents( base_path("routes/web.php"), file_get_contents(__DIR__."/stubs/make/routes.stub"), FILE_APPEND );
注意 FILE_APPEND 這個參數(shù),就是將 routes.stub 這個文件的內(nèi)容附加在原來路由文件的后面,并不會將原來的路由清零。那么添加的是下面的這兩條路由:
Auth::routes(); Route::get("/home", "HomeController@index")->name("home");
其中的 Auth::routes() 方法可以直接在 IlluminateSupportFacadesAuth:
public static function routes() { static::$app->make("router")->auth(); }
最終執(zhí)行路由注冊的在 IlluminateRoutingRouter 的 auth() 方法:
public function auth(){ // routes codes ... }最后揭秘
那么這些視圖文件,控制器文件和路由文件在哪呢?揭秘:就在 vendor/laravel/framework/src/Illuminate/Auth/Console/stubs/make 目錄,你打開這個目錄就可以看到這些魔法的真相!
Happy Hacking
最后記得關(guān)注 codecasts 公眾號,定期送書送福利!
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/23166.html
摘要:系統(tǒng)的核心是由的認(rèn)證組件的看守器和提供器組成。使用的認(rèn)證系統(tǒng),幾乎所有東西都已經(jīng)為你配置好了。其配置文件位于,其中包含了用于調(diào)整認(rèn)證服務(wù)行為的注釋清晰的選項配置。 用戶認(rèn)證系統(tǒng)(基礎(chǔ)介紹) 使用過Laravel的開發(fā)者都知道,Laravel自帶了一個認(rèn)證系統(tǒng)來提供基本的用戶注冊、登錄、認(rèn)證、找回密碼,如果Auth系統(tǒng)里提供的基礎(chǔ)功能不滿足需求還可以很方便的在這些基礎(chǔ)功能上進(jìn)行擴展。這篇...
摘要:前言由于在度娘找了半天根本一大堆版本,弄得我死去活來的,每個都試了一堆問題,到底你們做完有沒有總結(jié)過一次然后有幾個使用,完全不行啊,太監(jiān)版不是我想要的。后來,終于找到例子并實測成功。 前言 由于在度娘找了半天根本一大堆Copy版本,弄得我死去活來的,每個都試了一堆問題,到底你們做完有沒有總結(jié)過一次?然后有幾個使用lunmen+dingo api+jwt,完全不行啊,太監(jiān)版不是我想要的。...
摘要:自動代碼擴展開發(fā)時遵守的代碼風(fēng)格是項目開發(fā)規(guī)范。遵照此規(guī)范,在實際操作中,有許多重復(fù),接下來推薦一款專為此規(guī)范量身定制的代碼生成器??梢岳么藬U展來快速構(gòu)建項目原型。后續(xù)還會為大家?guī)硪恍┳钚碌募夹g(shù)擴展。 whoops 錯誤提示擴展 whoops 是一個非常優(yōu)秀的 PHP Debug 擴展,它能夠使你在開發(fā)中快速定位出錯的位置。laravel默認(rèn)安裝。showImg(https://s...
摘要:自動代碼擴展開發(fā)時遵守的代碼風(fēng)格是項目開發(fā)規(guī)范。遵照此規(guī)范,在實際操作中,有許多重復(fù),接下來推薦一款專為此規(guī)范量身定制的代碼生成器??梢岳么藬U展來快速構(gòu)建項目原型。后續(xù)還會為大家?guī)硪恍┳钚碌募夹g(shù)擴展。 whoops 錯誤提示擴展 whoops 是一個非常優(yōu)秀的 PHP Debug 擴展,它能夠使你在開發(fā)中快速定位出錯的位置。laravel默認(rèn)安裝。showImg(https://s...
閱讀 711·2021-11-18 10:02
閱讀 2249·2021-11-15 18:13
閱讀 3175·2021-11-15 11:38
閱讀 2963·2021-09-22 15:55
閱讀 3684·2021-08-09 13:43
閱讀 2454·2021-07-25 14:19
閱讀 2462·2019-08-30 14:15
閱讀 3458·2019-08-30 14:15