【问题标题】:How to set a route parameter default value from request url in laravel如何从 laravel 中的请求 url 设置路由参数默认值
【发布时间】:2018-05-28 15:08:54
【问题描述】:

我有这个路由设置:

Route::prefix('admin/{storeId}')->group(function ($storeId) {
  Route::get('/', 'DashboardController@index');
  Route::get('/products', 'ProductsController@index');
  Route::get('/orders', 'OrdersController@index');
});

因此,如果我使用“操作”帮助程序生成 url,则不必明确提供 storeId。

{{ action('DashboardController@index') }}

如果提供了请求 URL,我希望 storeId 自动设置。

可能是这样的。

Route::prefix('admin/{storeId}')->group(function ($storeId) {
  Route::get('/', 'DashboardController@index');
  Route::get('/products', 'ProductsController@index');
  Route::get('/orders', 'OrdersController@index');
})->defaults('storeId', $request->storeId);

【问题讨论】:

    标签: laravel laravel-5 routing routeparams


    【解决方案1】:

    尽管关于 route 助手(应该与所有 url 生成助手一起使用),但文档中提到了默认参数:

    “因此,您可以使用URL::defaults 方法为该参数定义一个默认值,该值将始终在当前请求期间应用。您可能希望从路由中间件调用此方法,以便您可以访问当前请求”

    “一旦设置了 ... 参数的默认值,您在通过 route 帮助器生成 URL 时不再需要传递其值。”

    Laravel 5.6 Docs - Url Generation - Default Values

    【讨论】:

    • 第一次使用中间件。我创建了 SetStoreIdFromRequest 中间件,注册它,将它分配给路由。一切顺利。谢谢!
    【解决方案2】:

    Laravel 完全按照您描述的方式工作。

    您可以在控制器方法中访问 storeId

    class DashboardController extends Controller {
        public function index($storeId) {
            dd($storeId);
        }
    }
    

    http://localhost/admin/20 将打印“20”

    【讨论】:

    • 访问路由参数没有问题。我希望路由参数采用默认值。但默认值不会在路由设置中作为静态值提供。但是它将从请求 url 提供。
    • 你应该在控制器方法中设置默认值public function index($storeId = 10)
    • 这句话我不是很清楚I want storeId to be set automatically from the request URL if provided.
    • 这个答案是基本路由,而不是如何设置默认值 - 如果您解释了 localhost/admin 到相同的 url 将如何打印“20”,如果 20 是默认值.. 那将很有用。
    猜你喜欢
    • 2020-02-07
    • 1970-01-01
    • 2020-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-30
    • 2018-07-21
    • 2018-01-14
    相关资源
    最近更新 更多