🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 控制器 ### 单个行为控制器 - 如果你想定义一个只处理单个行为的控制器,你可以在控制器中放置一个`__invoke`方法: - 当注册单个行为控制器的路由时,无需指明方法: - 控制器下面只有一个 `__invoke`方法: ``` <pre class="calibre11">```     Route::get('user/{id}', 'ShowProfile'); ``` ``` ## 控制器中间件 Middleware 可以在路由文件中分配给控制器的路由。 ``` <pre class="calibre11">``` Route::get('profile', 'UserController@show')->middleware('auth'); ``` ``` 在控制器构造函数中使用`middleware`方法 ``` <pre class="calibre11">``` class UserController extends Controller{           /**      * Instantiate a new controller instance.      *      * @return void      */         public function __construct()         {              $this->middleware('auth');                $this->middleware('log')->only('index');                $this->middleware('subscribed')->except('store');          }   } ``` ``` 控制器还允许您使用一个闭包注册中间件 ``` <pre class="calibre11">``` $this->middleware(function ($request, $next) {     //   ...       return $next($request);}); ``` ``` ## 资源控制器 使用 Artisan 命令`make:controller`, 可以快速创建这样一个控制器: ``` <pre class="calibre11">``` php artisan make:controller PhotoController --resource ``` ``` 这个命令会生成一个控制器`app/Http/Controllers/PhotoController.php`。 #### 指定资源模型 如果你使用了路由模型绑定,并且想在资源控制器的方法中使用类型提示,你可以在生成控制器的时候使用 `--model`选项: ``` <pre class="calibre11">``` php artisan make:controller PhotoController --resource --model=Photo ``` ``` ### 部分资源路由 声明资源路由时,你可以指定控制器应该处理的部分行为,而不是所有默认的行为: ``` <pre class="calibre11">``` Route::resource('photos', 'PhotoController')->only([     'index', 'show'  ]); Route::resource('photos', 'PhotoController')->except([    'create', 'store', 'update', 'destroy' ]); ``` ``` #### API 资源路由 当声明用于 APIs 的资源路由时,通常需要排除显示 HTML 模板的路由, 如 `create` 和 `edit`。 为了方便起见,你可以使用`apiResource` 方法自动排除这两个路由: ``` <pre class="calibre11">``` Route::apiResource('photos', 'PhotoController'); ``` ``` 你可以通过传递一个数组给`apiResources`方法的方式来一次性注册多个 API 资源控制器: ``` <pre class="calibre11">``` Route::apiResources([     'photos' => 'PhotoController',      'posts' => 'PostController' ]); ``` ``` 为了快速生成一个不包含 `create` 和 `edit` 方法的 API 资源控制器,可以在执行`make:controller`命令时加上 `--api`选项: ``` <pre class="calibre11">``` php artisan make:controller API/PhotoController --api ``` ``` ### 命名资源路由 默认情况下,所有资源控制器操作都有一个路由名称;但是,是可以通过用选项传递一个 `names` 数组来覆盖这些名称: ``` <pre class="calibre11">``` Route::resource('photos', 'PhotoController')->names([     'create' => 'photos.build' ]); ``` ``` ### 命名资源路由参数 默认情况下, `Route::resource` 会根据资源名称的 「单数」 形式创建资源路由的路由参数。你可以在选项数组中传入`parameters` 参数来轻松地覆盖每个资源。 `parameters` 数组应当是一个资源名称和参数名称的关联数组: ``` <pre class="calibre11">``` Route::resource('users', 'AdminUserController')->parameters([     'users' => 'admin_user' ]); ``` ``` 上列将会为资源的 `show`路由生成如下的 URl : ``` <pre class="calibre16">``` /users/{admin_user} ``` ```