将全局变量从当前URL传递给LARLAVEL组路由

2022-07-02 00:00:00 php laravel laravel-8 laravel-routing

我有一个具有以下结构的路由组:

Route::prefix('admin/{w_id}')->middleware(['auth'])->as('weblog.')->group(function () {
    Route::get('/dashboard', [HomePageController::class, 'index'])->name('dashboard');
    Route::resource('/blogcategory', CategoryController::class);

});

在仪表板路径上,我的url中有w_id,当我想将用户重定向到博客类别路径(从任何地方)时,我应该在路由助手类中传递w_id,我需要从当前链接全局设置一些东西。

例如我使用此方法时:

'route' => 'weblog.blogcategory.store'

我收到如下错误:

Missing required parameters for [Route: weblog.blogcategory.store]
并且我应该手动将w_id参数传递给所有路由助手,我需要从当前页面的url设置全局w_id。 我正在为用户的博客开发完全独立的管理区,博客ID存在于所有URL中。


解决方案

为了避免再次传递w_id,您需要使用URL::defaults(),它将为您的参数创建一个默认值。 您可以使用中间件传递默认值。

<?php

namespace AppHttpMiddleware;

use Closure;
use IlluminateSupportFacadesURL;

class SetDefaultWidForWeblogs
{
    public function handle($request, Closure $next)
    {
        URL::defaults(['w_id' => /* pass the default value here*/]);

        return $next($request);
    }
}

现在将中间件注册到app/Http/Kernel.php类中(请参阅更多说明here)

protected $routeMiddleware = [
    ...

    'pass_wid' => AppHttpMiddlewareSetDefaultWidForWeblogs::class,
];

然后使用该中间件 因此,对于您的路由组

Route::prefix('admin/{w_id}')->middleware(['auth', 'pass_wid'])->as('weblog.')->group(function () {
    Route::get('/dashboard', [HomePageController::class, 'index'])->name('dashboard');
    Route::resource('/blogcategory', CategoryController::class);

});

请参阅文档中的关于default values to Url

相关文章