php - Laravel 路由组全局范围

标签 php laravel scope routes

我在解决如何向 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/

相关文章:

php - 跨不同域保留 session 变量

php - 显示含税和不含税的 Woocommerce 产品价格和税额

php - 在 PhpStorm 中标记 @see

php - 在 PHP 中表达 Json 响应

Laravel 编辑现有 pdf

python - 如何在 Python 中静态(词法)绑定(bind)名称?

c++ - 如何在 C++ 中有意保留和收获悬空指针

php - 分组的 Laravel 路由会被缓存吗?它们缓存在哪里?

php - Laravel 时间戳在没有明确调用的情况下被更新

Javascript:列出同一范围内的所有变量(iframe)