我在解决如何向 Laravel 中的路由组添加全局范围时遇到了一些麻烦。我所做的是
Route::group([
"prefix" => "customer",
"namespace" => "Customer",
"as" => "Customer.",
], function() {
//make sure only public salons are displayed!
\App\Salon::addGlobalScope("public", function(\Illuminate\Database\Eloquent\Builder $builder) {
$builder->where("public", 1);
});
Route::get("/", "IndexController@index")->name("index");
Route::get("/salon/{salon}", "SalonController@show")->name("salon.show");
});
我的想法是,我希望将公共(public)查询添加到整个组内!这包括在沙龙模型和路由绑定(bind)上调用 newQuery。这样可能吗?假设我很懒,而不是定义路由绑定(bind)并将范围添加到每个使用中,我宁愿在此处执行此操作,因为我需要在整个组中使用此绑定(bind)!
提前致谢:)
最佳答案
创建一个中间件来添加路由范围:
在app/Http/Kernel.php
中:
protected $routeMiddleware = [
// Other route middleware
'restrict.public' => App\Http\Middleware\AddPublicScope::class
];
在您创建的app/Http/Middleware/AddPublicScope.php
中:
namespace App\Http\Middleware;
use Closure;
use App\Salon;
use Illuminate\Database\Eloquent\Builder;
class AddPublicScope
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
Salon::addGlobalScope('public', function($builder) {
$builder->where('public', 1);
});
return $next($request);
}
}
然后在您的路由组定义中:
Route::group([
"prefix" => "customer",
"namespace" => "Customer",
"middleware" => ['restrict.public']
"as" => "Customer.",
], function() {
Route::get("/", "IndexController@index")->name("index");
Route::get("/salon/{salon}", "SalonController@show")->name("salon.show");
});
关于php - Laravel 路由组全局范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41469798/