laravel第四講:路由命名及路由分組

路由命名

路由命名是為了程序能夠方便的獲取到路由信息,拿到該信息,可以進行重定向或作其他操作。路由命令通過name方法來實現。下面,我們來給一個路由命名:

Route::get('about',?function?()?{})->name('index.about');

當給一個路由命名后,就可以通過助手函數route來獲取該路由的url。

$url?=?route('index.about'); echo?$url;??//?http://localhost:8000/about

如果我們不想要前面的域名部分,只想拿后面的路徑,那么可以這樣

$url?=?route('index.about',?[],?false); echo?$url;??//?/about

如果定義的是有參數的路由,那么可以把參數作為route函數的第二個參數傳入

Route::get('news/{id}',?'IndexController@news')->name('home.news');  ... return?redirect()->route('home.news',?['id'?=>?23]);

route函數中第二個參數數組元素可以自動和路由參數對應,若route函數中第二個參數數組元素比路由設定的參數多的話,則會自動拼接生成URL

echo?route('home.news',?['id'?=>?23,?'page'?=>?3,?'page_num'?=>?20]); //?http://localhost:8000/news/23?page=3&page_num=20

路由分組

路由分組的作用是,當系統設定了許多路由,但發現有些路由有一些共同的點,比如有相同的命名空間前綴,或有相同的路徑前綴,那么就可以把有共同點的那些路由放在一個路由中,方便了管理也減少了代碼量,并且代碼看上去也更加的優雅。

路由前綴

我們把有相同前綴的路由放在一個分組里。下面是兩個有相同前綴的路由:

Route::prefix('index')->get('a',?function?()?{ ????return?'a';?//?匹配/index/a });  Route::prefix('index')->get('b',?function?()?{ ????return?'b';?//?匹配/index/b });

現在,我們將他們放到一個分組中

Route::prefix('index')->group(function?() { ????Route::get('a',?function?()?{ ????????return?'a';?//?匹配/index/a ????}); ????Route::get('b',?function?()?{ ????????return?'b';?//?匹配/index/b ????}); });

除了使用prefix方法外,還可以在group方法的第一個參數中設定,如下所示:

Route::group(['prefix'?=>?'index'],?function?() { ????Route::get('a',?function?()?{ ????????return?'a';?//?匹配/index/a ????}); ????Route::get('b',?function?()?{ ????????return?'b';?//?匹配/index/b ????}); });

命名空間

命名空間也是一個經常會用到的路由分組。

Route::group(['namespace'?=>?'Home'],?function?() { ????Route::get('home/index',?'IndexController@index'); });

如果上述代碼沒有設置命名空間,則上面的路由則為

Route::get('home/index',?'HomeIndexController@index');

子域名

用來設定通過哪個域名可以訪問,不是這個域名即使路徑正確也不可以訪問。

Route::domain('php.cn')->group(...)

名稱前綴

name方法可以為每個路由分組中路由添加一個給定前綴

Route::name('abc.')->group(?function?() { ????Route::get('home',?function?()?{  ????})->name('home'); });  …… $url?=?route('abc.home');

? 版權聲明
THE END
喜歡就支持一下吧
點贊13 分享