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

資訊專欄INFORMATION COLUMN

Laravel 源碼解讀:php artisan make:auth

xorpay / 2874人閱讀

摘要:添加路由在方法中,通過下面幾行代碼添加路由注意這個參數(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/layoutsresources/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í)行路由注冊的在 IlluminateRoutingRouterauth() 方法:

 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

相關(guān)文章

  • Laravel核心解讀 -- 用戶認(rèn)證系統(tǒng)(基礎(chǔ)介紹)

    摘要:系統(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)行擴展。這篇...

    RebeccaZhong 評論0 收藏0
  • laravel入門

    摘要:開發(fā)根目錄測試分為單元測試和功能測試創(chuàng)建一個文件執(zhí)行測試測試前清除配置緩存運行單個測試用例小提示在開發(fā)與進(jìn)行交互的第三方擴展包時,最好選擇注入契約而不使用。 參考https://laravelacademy.org/ 概念 單詞 契約Contract 就是接口 repository 倉庫(封裝數(shù)據(jù)訪問,可以搜索:repository模式) Container 容器 ServicePr...

    韓冰 評論0 收藏0
  • laravel 5.4 + dingo api + jwt 代替Passport

    摘要:前言由于在度娘找了半天根本一大堆版本,弄得我死去活來的,每個都試了一堆問題,到底你們做完有沒有總結(jié)過一次然后有幾個使用,完全不行啊,太監(jiān)版不是我想要的。后來,終于找到例子并實測成功。 前言 由于在度娘找了半天根本一大堆Copy版本,弄得我死去活來的,每個都試了一堆問題,到底你們做完有沒有總結(jié)過一次?然后有幾個使用lunmen+dingo api+jwt,完全不行啊,太監(jiān)版不是我想要的。...

    _Zhao 評論0 收藏0
  • laravel開發(fā)擴展記錄

    摘要:自動代碼擴展開發(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...

    fancyLuo 評論0 收藏0
  • laravel開發(fā)擴展記錄

    摘要:自動代碼擴展開發(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...

    魏憲會 評論0 收藏0

發(fā)表評論

0條評論

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