gpt4 book ai didi

php - 各种 Laravel Controller 方法之间的通用逻辑

转载 作者:行者123 更新时间:2023-12-03 06:01:30 24 4
gpt4 key购买 nike

假设我有一个像这样的 URL:

/city/nyc   (display info about new york city)

还有一个这样的:

/city/nyc/streets   (display a list of Street of nyc)

我可以将它们绑定(bind)到这样的方法:

Route::get('city/{city}', 'CityController@showCity');
Route::get('city/{city}/streets', 'CityController@showCityStreet');

问题是我需要在这两种方法上对城市执行一些检查(例如数据库中是否存在 {city})。我可以创建一个方法并像这样调用它们:

class CityController {

private function cityCommonCheck($city) {
// check
}

public function showCity($city) {
$this->cityCommonCheck($city);

// other logic
}

public function showCityStreet($city) {
$this->cityCommonCheck($city);

// other logic
}
}

还有什么更好的办法吗?

最佳答案

即使您的想法不同,我相信中间件是最好的解决方案。

首先,使用php artisan make:middleware CityCheckMiddlewareApp/Http/Middleware中创建一个类。然后编辑方法来执行检查应该执行的操作,并添加一个构造函数来注入(inject) Router

public function __construct(\Illuminate\Http\Routing\Router $router){
$this->route = $router;
}

public function handle($request, Closure $next)
{
$city = $this->route->input('city');

// do checking

return $next($request);
}

App/Http/Kernel.php中定义一个速记键:

protected $routeMiddleware = [
'auth' => 'App\Http\Middleware\Authenticate',
// ...
'city_checker' => 'App\Http\Middleware\CityCheckerMiddleware',
];

然后,在您的 Controller 中:

public function __construct()
{
$this->middleware('city_checker', ['only' => ['showCity', 'showCityStreet']]);
}

关于php - 各种 Laravel Controller 方法之间的通用逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29343176/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com