sou*_*rri 2 php scope routes laravel
我在解决如何将全局范围添加到 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");
});
Run Code Online (Sandbox Code Playgroud)
这个想法是我希望在整个组中添加公共查询!这包括在沙龙模型和路由绑定上调用 newQuery。这可能吗?假设我很懒惰,而不是定义路由绑定并将范围添加到每次使用中,我宁愿在这里执行此操作,因为我在整个组中都需要此绑定!
提前致谢 :)
创建一个中间件来添加路由的范围:
在app/Http/Kernel.php:
protected $routeMiddleware = [
// Other route middleware
'restrict.public' => App\Http\Middleware\AddPublicScope::class
];
Run Code Online (Sandbox Code Playgroud)
在您创建的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);
}
}
Run Code Online (Sandbox Code Playgroud)
然后在您的路由组定义中:
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");
});
Run Code Online (Sandbox Code Playgroud)