# 路由器
### 基本路由
雖然為[后端控制器](https://octobercms.com/docs/backend/controllers-ajax)自動處理路由,并且CMS頁面在其[頁面配置中](https://octobercms.com/docs/cms/pages#configuration)定義了自己的URL路由,但路由器服務主要用于定義固定的API和端點。
您可以通過在與[插件注冊文件](https://octobercms.com/docs/plugin/registration)相同的目錄中創建一個名為**route.php**的文件來定義這些路由。最基本的路由只接受URI和:[](https://octobercms.com/docs/plugin/registration)`Closure`
~~~
Route::get('/', function () {
return 'Hello World';
});
Route::post('foo/bar', function () {
return 'Hello World';
});
Route::put('foo/bar', function () {
//
});
Route::delete('foo/bar', function () {
//
});
~~~
#### 注冊多個動詞的路線
有時您可能需要注冊一個響應多個HTTP動詞的路由。您可以使用立面上的`match`方法來這樣做`Route`:
~~~
Route::match(['get', 'post'], '/', function () {
return 'Hello World';
});
~~~
您甚至可以使用以下`any`方法注冊一個響應所有HTTP動詞的路由:
~~~
Route::any('foo', function () {
return 'Hello World';
});
~~~
#### 生成路由的URL
您可以使用`Url`立面生成指向路線的URL:
~~~
$url = Url::to('foo');
~~~
### [](https://octobercms.com/docs/services/router#route-parameters)路線參數
### [](https://octobercms.com/docs/services/router#required-parameters)必要參數
有時您需要捕獲路由內的URI段,例如,您可能需要從URL中捕獲用戶的ID。您可以通過定義路由參數來做到這一點:
~~~
Route::get('user/{id}', function ($id) {
return 'User '.$id;
});
~~~
您可以根據自己的路線定義任意多個路線參數:
~~~
Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
//
});
~~~
路線參數始終放在單個*大括號內*。`Closure`執行路線時,參數將傳遞到您的路線中。
> **注意:**路由參數不能包含`-`字符。請改用下劃線(`_`)。
### [](https://octobercms.com/docs/services/router#parameters-optional-parameters)可選參數
有時,您可能需要指定一個路由參數,但使該路由參數的出現為可選。您可以通過`?`在參數名稱后放置一個標記來做到這一點:
~~~
Route::get('user/{name?}', function ($name = null) {
return $name;
});
Route::get('user/{name?}', function ($name = 'John') {
return $name;
});
~~~
### [](https://octobercms.com/docs/services/router#parameters-regular-expression-constraints)正則表達式約束
您可以`where`在路由實例上使用方法來限制路由參數的格式。該`where`方法接受參數名稱和正則表達式,該正則表達式定義應如何約束參數:
~~~
Route::get('user/{name}', function ($name) {
//
})->where('name', '[A-Za-z]+');
Route::get('user/{id}', function ($id) {
//
})->where('id', '[0-9]+');
Route::get('user/{id}/{name}', function ($id, $name) {
//
})->where(['id' => '[0-9]+', 'name' => '[a-z]+']);
~~~
### [](https://octobercms.com/docs/services/router#named-routes)命名路線
命名路由使您可以方便地生成URL或特定路由的重定向。`as`定義路由時,可以使用數組鍵為路由指定名稱:
~~~
Route::get('user/profile', ['as' => 'profile', function () {
//
}]);
~~~
#### 路線組和命名路線
如果您使用的是[路由組](https://octobercms.com/docs/services/router#route-groups),則可以`as`在路由組屬性數組中指定一個關鍵字,從而可以為該組內的所有路由設置通用的路由名稱前綴:
~~~
Route::group(['as' => 'admin::'], function () {
Route::get('dashboard', ['as' => 'dashboard', function () {
// Route named "admin::dashboard"
}]);
});
~~~
#### 生成命名路由的URL
為給定路由分配名稱后,可以在生成URL或通過`Url::route`方法重定向時使用路由名稱:
~~~
$url = Url::route('profile');
$redirect = Response::redirect()->route('profile');
~~~
如果路由定義了參數,則可以將參數作為第二個參數傳遞給`route`方法。給定的參數將自動插入URL:
~~~
Route::get('user/{id}/profile', ['as' => 'profile', function ($id) {
//
}]);
$url = Url::route('profile', ['id' => 1]);
~~~
### [](https://octobercms.com/docs/services/router#route-groups)路線組
路由組使您可以在大量路由之間共享路由屬性,而無需在每個單獨的路由上定義那些屬性。共享屬性以數組格式指定為方法的第一個參數`Route::group`。
### [](https://octobercms.com/docs/services/router#route-group-sub-domain-routing)子域路由
路由組也可以用于路由通配符子域。可以為子域分配路由參數,就像路由URI一樣,允許您捕獲子域的一部分以在路由或控制器中使用。可以使用`domain`組屬性數組上的鍵來指定子域:
~~~
Route::group(['domain' => '{account}.example.com'], function () {
Route::get('user/{id}', function ($account, $id) {
//
});
});
~~~
### [](https://octobercms.com/docs/services/router#route-group-prefixes)路由前綴
該`prefix`組陣列屬性可被用于前綴與給定URI的組中的每個路由。例如,您可能想在組內的所有路由URI前面加上`admin`:
~~~
Route::group(['prefix' => 'admin'], function () {
Route::get('users', function () {
// Matches The "/admin/users" URL
});
});
~~~
您還可以使用`prefix`參數為分組的路由指定通用參數:
~~~
Route::group(['prefix' => 'accounts/{account_id}'], function () {
Route::get('detail', function ($account_id) {
// Matches The accounts/{account_id}/detail URL
});
});
~~~
### [](https://octobercms.com/docs/services/router#route-middleware)路由中間件
在插件的`boot()`方法中注冊中間件將針對每個請求在全局范圍內注冊它。如果您想一次將中間件注冊到一個路由,則應這樣做:
~~~
Route::get('info', 'Acme\News@info')->middleware('Path\To\Your\Middleware');
~~~
對于路由組,可以這樣進行:
~~~
Route::group(['middleware' => 'Path\To\Your\Middleware'], function() {
Route::get('info', 'Acme\News@info');
});
~~~
最后,如果要將一組中間件分配給一個路由,可以這樣
~~~
Route::middleware(['Path\To\Your\Middleware'])->group(function() {
Route::get('info', 'Acme\News@info');
});
~~~
當然,您可以在一個組中添加多個中間件,為方便起見,在上述示例中僅使用了一個。
### [](https://octobercms.com/docs/services/router#throwing-404-errors)引發404錯誤
有兩種方法可以從路由手動觸發404錯誤。首先,您可以使用`abort`助手。該`abort`助手簡單地拋出一個`Symfony\Component\HttpFoundation\Exception\HttpException`具有指定狀態代碼:
~~~
App::abort(404);
~~~
其次,您可以手動拋出的實例`Symfony\Component\HttpKernel\Exception\NotFoundHttpException`。
有關處理404異常以及對這些錯誤使用自定義響應的更多信息,可以在文檔的“[錯誤和日志記錄”](https://octobercms.com/docs/services/error-log)部分中找到。
- 基本說明
- 基本操作
- October cms 安裝
- 后臺控制器路徑
- 圖標
- 獲取安裝網上的插件/主題
- 插件構造器使用
- 定時任務
- October后臺控制器
- vscode編輯器
- ajax操作
- 使用
- ajax更新組件
- ajax屬性API
- JavaScript API
- ajax綜合使用
- 主題
- 多語言主題
- 安裝市場主題
- 主題程序處理
- 主題
- 頁面
- 部件
- 布局
- 內容
- 組件
- 媒體
- 主題表單操作
- 表單使用
- 表單后端程序處理
- 插件
- 自定義插件
- 插件說明
- 插件導航條
- 插件數據庫設置
- 插件的設置管理
- 插件的配置文件config
- 組件
- app服務
- app容器
- 擴展行為
- 緩存
- Collection類
- Lazy Collections
- Collection方法
- 助手函數
- 數組助手函數
- 路徑助手函數
- 玄樂助手函數
- 其他助手函數
- 錯誤與記錄
- 事件處理
- HTML頁面
- 文件與目錄操作
- 散列和加密
- 郵件
- 郵件內容
- 郵件發送
- 分頁
- 模板解析器
- 動態解析器語法
- 隊列消息
- 請求與輸入
- 響應
- 視圖
- 路由器
- 配置
- 驗證操作
- 處理錯誤消息
- 錯誤消息與視圖
- 可用的驗證規則
- 有條件的驗證規則
- 驗證數組
- 錯誤消息
- 自定義驗證規則
- 模型操作
- 定義模型與其屬性
- 檢索模型
- 插入與更新
- 刪除模型
- 查詢范圍
- 事件操作
- 關聯操作
- 定義關系
- 關系類型
- 多肽關系
- 關系查詢
- 渴望加載
- 插入模型
- 數據庫操作
- 基本用法
- 數據表結構
- 查詢連貫操作
- 結果檢索
- select子句
- 插入更新
- where子句
- 排序,分組,限制和偏移
- 文件附件
- Collection操作
- 屬性操作
- 系列化json
- 數據庫屬性
- 數據庫行為
- 控制器
- 后臺控制器定義
- 后臺頁面
- 后臺組件
- 后臺表單
- 表單組件
- 表單視圖
- 表單行為
- 后臺列表
- 列表行為
- 列表過濾器
- 可用列類型
- 關系行為
- 關系行為類型
- 擴展關系行為
- 列表排序操作
- 導入導出操作
- 用于與權限
- corlate模板修改
- 修改頂部導航
- laravel問題
- 控制器不存在
- 控制器
- 路由組
- laravel筆記
- laravel 安裝
- 偽靜態配置
- 依賴注入 & 控制器
- 中間件
- 路由文件
- 視圖