1 介绍

Laravel 控制器

配套视频地址 https://www.bilibili.com/video/av70545323?p=5

定义控制器可以不去继承 Controllers,这样你将不能使用 middleware、validate、dispatch 等方法。

如果你的控制器只有一个方法,可以这么玩儿:

// Route::get('user/{id}', 'ShowProfile');
// php artisan make:controller ShowProfile --invokable
public function __invoke($id)
{
     return view('user.profile', ['user' => User::findOrFail($id)]);
}

中间件

路由中间件

Route::get('profile', 'UserController@show')->middleware('auth');

控制器的中间件

$this->middleware('auth');
$this->middleware('auth')->only('index');
$this->middleware('auth')->except('store');
$this->middleware(function ($request, $next) {
       return $next($request);
});

Resource 控制器

php artisan make:controller PhotoController --resource
php artisan make:controller PhotoController --resource --model=Photo

Route::resource('photos', 'PhotoController');
Route::apiResource('photos', 'PhotoController');    // 没有 create 和 edit

Route::resources([
    'photos' => 'PhotoController',
    'posts' => 'PostController'
]);

Route::apiResources([
    'photos' => 'PhotoController',
    'posts' => 'PostController'
]);

Route::resource('photos', 'PhotoController')->names([
    'create' => 'photos.build'
]);  // 重命名路由名称


Route::resource('photo', 'PhotoController', ['only' => [
    'index', 'show'
]]);
Route::resource('photo', 'PhotoController', ['except' => [
    'create', 'store', 'update', 'destroy'
]]);
Verb URI Action Route Name
GET /photos index photos.index
GET /photos/create create photos.create
POST /photos store photos.store
GET /photos/ show photos.show
GET /photos/{photo}/edit edit photos.edit
PUT/PATCH /photos/ update photos.update
DELETE /photos/ destroy photos.destroy

命名 resource 路由的参数

默认情况下,Route::resource 会根据资源名称的「单数」形式创建资源路由的路由参数。你可以在选项数组中传入 parameters 参数来轻松地覆盖每个资源。parameters 数组应该是资源名称和参数名称的关联数组:

Route::resource('user', 'PhotoController', ['parameters' => [
    'photo' => 'photo_in_phone'
]]);
# /user/{photo_in_phone}

重命名所有的动词名 create、edit

// AppServiceProvider
Route::resourceVerbs([
    'create' => 'crear',
    'edit' => 'editar',
]);

如果想加入其他控制器方法,尽量写在 resource 控制器路由之前,否则可能会被 resource 控制器的路由覆盖。

写的控制器要专一,如果你需要典型的 resource 操作之外的方法,可以考虑将你的控制器分成两个更小的控制器。

参数必须在依赖注入之后传入

# Route::put('user/{id}', 'UserController@update');
public function update(Request $request, $id)
{
    // 上面的 Request $request 相当于: $request = new Resquest();
    $url = $request->url();
    //
}

posted on   何苦->  阅读(45)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示