這篇文章主要講解了“如何在大型Laravel項目中組織路由”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“如何在大型Laravel項目中組織路由”吧!
專注于為中小企業(yè)提供成都做網(wǎng)站、網(wǎng)站建設(shè)服務(wù),電腦端+手機端+微信端的三站合一,更高效的管理,為中小企業(yè)蘇家屯免費做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動了近1000家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實現(xiàn)規(guī)模擴充和轉(zhuǎn)變。
這個簡單,因為 Laravel 已經(jīng)幫你做了。有如下兩個文件:
routes/web.php
routes/api.php
因此,如果你的項目同時具有前端頁面和 API (使用場景越來越廣),請把 API 的路由放在 api.php 里。例如,如果你有 /users頁面,又有 /api/users/端點,把他們分別寫在自己屬于自己路由文件里,以免在同一文件中出現(xiàn)同一相同名稱而產(chǎn)生混淆。
另一個例子證明 Laravel 還是非常的個人化,甚至 Taylor 自己也沒有 100% 按照標準來。
下面例子也是來自 Laravel 官方文檔 的示例:
Route::middleware(['first', 'second'])->group(function () {
Route::get('/', function () {
// 使用 first 和 second 中間件
});
Route::get('user/profile', function () {
// 使用 first 和 second 中間件
});
});
最基本的用法是將不同的路由分組包含在不同的中間件里面。例如,你希望一個組默認受 auth中間件限制,另一組受單獨的 admin自定義中間件限制等。
這樣,你還可以使用 名稱和 前綴等路由分組方法。同樣,官方文檔中給出了示例:
Route::prefix('admin')->group(function () {
Route::get('users', function () {
// 匹配 URL 「/admin/users」
});
});
Route::name('admin.')->group(function () {
Route::get('users', function () {
// 路由名為 「admin.users」...
})->name('users');
});
另外,如果您要將所有中間件 + 名稱 + 前綴添加到一個組中,則將它們放入數(shù)組中更容易理解:
// 而不是這樣做:
Route::name('admin.')->prefix('admin')->middleware('admin')->group(function () {
// ...
});
// 可以使用數(shù)組
Route::group([
'name' => 'admin.',
'prefix' => 'admin',
'middleware' => 'auth'
], function () {
// ...
});
我們將其結(jié)合為一個擁有三個路由分組的真實示例:
帶有 / front / XXXXXURL 且沒有中間件的「訪客」組
帶有 / user / XXXXXURL 和 auth中間件的「用戶」組
帶有 / admin / XXXXXURL 和自定義 admin中間件的「管理員」組
以下是將所有內(nèi)容分組到 routes / web.php文件中的一種方法:
Route::group([
'name' => 'admin.',
'prefix' => 'admin',
'middleware' => 'admin'
], function () {
// URL鏈接:/admin/users
// 路由名稱:admin.users
Route::get('users', function () {
return 'Admin: user list';
})->name('users');
});
Route::group([
'name' => 'user.',
'prefix' => 'user',
'middleware' => 'auth'
], function () {
// URL鏈接:/user/profile
// 路由名稱:user.profile
Route::get('profile', function () {
return 'User profile';
})->name('profile');
});
Route::group([
'name' => 'front.',
'prefix' => 'front'
], function () {
// 這里沒有中間件
// URL鏈接:/front/about-us
// 路由名稱:front.about
Route::get('about-us', function () {
return 'About us page';
})->name('about');
});
在上面的例子中,我們沒有使用控制器,只是返回了靜態(tài)文本作為示例。 讓我們添加一個控制器,來點小花樣 — 我們會將它們構(gòu)造到各自不同的命名空間的文件夾中
然后我們可以在路由文件中使用它們:
Route::group([
'name' => 'front.',
'prefix' => 'front'
], function () {
Route::get('about-us', 'Front.boutController@index')->name('about');
});
但是如果在這個組中我們有很多控制器呢? 我們應(yīng)該一直添加Front.omeController嗎? 當然不是。您也可以將命名空間作為參數(shù)之一。
Route::group([
'name' => 'front.',
'prefix' => 'front',
'namespace' => 'Front',
], function () {
Route::get('about-us', 'AboutController@index')->name('about');
Route::get('contact', 'ContactController@index')->name('contact');
});
上面的情況,分為了3個組,實際上這是被簡化的, 實際項目的結(jié)構(gòu)稍有不同 – 是 兩個組:front和 auth。 然后在 auth中,有兩個子組:user和 admin。為此, 我們可以在 routes/web.php中創(chuàng)建子組,并分配不同的中間件/前綴等。
Route::group([
'middleware' => 'auth',
], function() {
Route::group([
'name' => 'admin.',
'prefix' => 'admin',
'middleware' => 'admin'
], function () {
// URL: /admin/users
// Route name: admin.users
Route::get('users', 'UserController@index')->name('users');
});
Route::group([
'name' => 'user.',
'prefix' => 'user',
], function () {
// URL: /user/profile
// Route name: user.profile
Route::get('profile', 'ProfileController@index')->name('profile');
});
});
我們甚至可以多層嵌套,這是開源項目的一個示例。 Akaunting:
Route::group(['middleware' => 'language'], function () {
Route::group(['middleware' => 'auth'], function () {
Route::group(['prefix' => 'uploads'], function () {
Route::get('{id}', 'Common.ploads@get');
Route::get('{id}/show', 'Common.ploads@show');
Route::get('{id}/download', 'Common.ploads@download');
});
Route::group(['middleware' => 'permission:read-admin-panel'], function () {
Route::group(['prefix' => 'wizard'], function () {
Route::get('/', 'Wizard.ompanies@edit')->name('wizard.index');
// ...
另一個例子來自另一個流行的Laravel CRM,名為Monica:
Route::middleware(['auth', 'verified', 'mfa'])->group(function () {
Route::name('dashboard.')->group(function () {
Route::get('/dashboard', 'DashboardController@index')->name('index');
Route::get('/dashboard/calls', 'DashboardController@calls');
Route::get('/dashboard/notes', 'DashboardController@notes');
Route::get('/dashboard/debts', 'DashboardController@debts');
Route::get('/dashboard/tasks', 'DashboardController@tasks');
Route::post('/dashboard/setTab', 'DashboardController@setTab');
});
有一個服務(wù)于所有路由設(shè)置的文件 – app/Providers/RouteServiceProvider.php. 它具有綁定兩個路由文件 – web 和 API 的 map()方法:
public function map()
{
$this->mapApiRoutes();
$this->mapWebRoutes();
}
protected function mapWebRoutes()
{
Route::middleware('web')
->namespace($this->namespace)
->group(base_path('routes/web.php'));
}
protected function mapApiRoutes()
{
Route::prefix('api')
->middleware('api')
->namespace($this->namespace)
->group(base_path('routes/api.php'));
}
您是否注意到方法中提及的 middleware, namespace和 prefix? 這是您可以為整個文件設(shè)置全局配置的地方,因此不必為文件中的每個路由組重復這些設(shè)置。
它主要用于 API 路由,因為它們的設(shè)置通常是相同的,如下所示:
protected function mapApiRoutes(){
Route::group([
'middleware' => ['api'],
'namespace' => $this->namespace,
'prefix' => 'api/v1',
], function ($router) {
require base_path('routes/api.php');
});}
上述方法將在所有 API URLs 的開頭加上 api/v1/前綴。
如果您有大量的路由,并且希望將它們分組到單獨的文件中,那么您可以使用上一節(jié)中提到的相同文件 – app/Providers/RouteServiceProvider.php。如果您仔細查看它的 map()方法,您將在末尾看到注釋位置:
public function map(){
$this->mapApiRoutes();
$this->mapWebRoutes();
//}
如果愿意,您可以將其解釋為添加更多文件的“邀請”。因此,您可以在此文件內(nèi)創(chuàng)建另一個方法,例如 mapAdminRoutes(),然后將其添加到 map()方法, 您的文件將被自動注冊并加載。
但是,就我個人而言,我看不出這種方法有什么優(yōu)勢,而且我也沒有經(jīng)??吹竭@種做法。它會帶來更多的路由分離,但有時您會迷失在那些文件中,不確定在哪里查找特定的路由。
說到更大的路由并迷失在那里,我們有一個 Artisan 命令可以幫助定位某個路由。
您可能知道 php artisan route:list將展示項目中的所有路由但您知道還有更多的過濾功能來找到您想要的東西嗎? 只需添加帶參數(shù)的 –method,或 –name,或 –path。
通過 method 過濾 – GET, POST 等
按名稱或 URL 部分過濾
感謝各位的閱讀,以上就是“如何在大型Laravel項目中組織路由”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對如何在大型Laravel項目中組織路由這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!
當前題目:如何在大型Laravel項目中組織路由
網(wǎng)址分享:http://aaarwkj.com/article12/pcoddc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、網(wǎng)站收錄、網(wǎng)站設(shè)計公司、網(wǎng)站排名、搜索引擎優(yōu)化、企業(yè)網(wǎng)站制作
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)