多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
### 单个行为控制器 * 如果你想定义一个只处理单个行为的控制器,你可以在控制器中放置一个`__invoke`方法: * 当注册单个行为控制器的路由时,无需指明方法: * 控制器下面只有一个 `__invoke`方法: ~~~     Route::get('user/{id}', 'ShowProfile'); ~~~ ## 控制器中间件 Middleware 可以在路由文件中分配给控制器的路由。 ~~~ Route::get('profile', 'UserController@show')->middleware('auth'); ~~~ 在控制器构造函数中使用`middleware`方法 ~~~ 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');          }   } ~~~ 控制器还允许您使用一个闭包注册中间件 ~~~php $this->middleware(function ($request, $next) {     //   ...       return $next($request);}); ~~~ ## 资源控制器 使用 Artisan 命令`make:controller`, 可以快速创建这样一个控制器: ~~~ php artisan make:controller PhotoController --resource ~~~ 这个命令会生成一个控制器`app/Http/Controllers/PhotoController.php`。 #### 指定资源模型 如果你使用了路由模型绑定,并且想在资源控制器的方法中使用类型提示,你可以在生成控制器的时候使用  `--model`选项: ~~~php php artisan make:controller PhotoController --resource --model=Photo ~~~ ### 部分资源路由 声明资源路由时,你可以指定控制器应该处理的部分行为,而不是所有默认的行为: ~~~ Route::resource('photos', 'PhotoController')->only([     'index', 'show'  ]); Route::resource('photos', 'PhotoController')->except([    'create', 'store', 'update', 'destroy' ]); ~~~ #### API  资源路由 当声明用于 APIs  的资源路由时,通常需要排除显示 HTML  模板的路由, 如  `create` 和  `edit`。 为了方便起见,你可以使用`apiResource` 方法自动排除这两个路由: ~~~ Route::apiResource('photos', 'PhotoController'); ~~~ 你可以通过传递一个数组给`apiResources`方法的方式来一次性注册多个 API 资源控制器: ~~~ Route::apiResources([     'photos' => 'PhotoController',      'posts' => 'PostController' ]); ~~~ 为了快速生成一个不包含  `create` 和  `edit` 方法的 API 资源控制器,可以在执行`make:controller`命令时加上  `--api`选项: ~~~ php artisan make:controller API/PhotoController --api ~~~ ### 命名资源路由 默认情况下,所有资源控制器操作都有一个路由名称;但是,是可以通过用选项传递一个  `names` 数组来覆盖这些名称: ~~~ Route::resource('photos', 'PhotoController')->names([     'create' => 'photos.build' ]); ~~~ ### 命名资源路由参数 默认情况下,  `Route::resource` 会根据资源名称的 「单数」  形式创建资源路由的路由参数。你可以在选项数组中传入`parameters` 参数来轻松地覆盖每个资源。  `parameters` 数组应当是一个资源名称和参数名称的关联数组: ~~~ Route::resource('users', 'AdminUserController')->parameters([     'users' => 'admin_user' ]); ~~~ 上列将会为资源的  `show`路由生成如下的 URl : ~~~ /users/{admin_user} ~~~