【问题标题】:Laravel route: how dynamiccally use routes [closed]Laravel 路由:如何动态使用路由 [关闭]
【发布时间】:2021-01-02 08:22:11
【问题描述】:

我有两个相同的网址。如何动态重定向到正确的路由?

我用了->where(),不过我明白,它只是验证变量,而不是过滤路由进入。

 Route::match(['get', 'post'], '/{model}/{method}/{id?}', [CrudController::class, 'index'])
   ->defaults('id', '')
   ->defaults('config', $config)
   ->where('model', 'Task');

 
 //Hide headers, for users
 Route::match(['get', 'post'], '/{model}/{method}/{id?}', [CrudController::class, 'index'])
   ->defaults('id', '')
   ->defaults('config', $config_user)
   ->where('model', 'User');

【问题讨论】:

  • 这是不可能的,因为两者具有相同的模式样式。添加区分符,例如 task/{model}/{method}/{id?} 和 user/{model}/{method}/{id?}。这对于避免与未来路线混淆也很有用。
  • 你为什么要反对这个框架?
  • 你的意思是,为什么我不对 {model} 使用静态部分?因为,在最终代码中,这意味着 20 块复制/粘贴。

标签: php laravel routes controller


【解决方案1】:

我用肮脏的方式解决了问题(Laravel 8.0),希望在未来的版本中,Laravel 将提供路由过滤,按变量。

 $model = request()->segment(1);
 
 if (in_array($model, $config['allow_models']))       
   Route::match(['get', 'post'], '/{model}/{method}/{id?}', [CrudController::class, 'index'])
     ->defaults('id', '')
     ->defaults('config', $config);

 else if (in_array($model, $config_user['allow_models']))
   //Hide headers, for users
   Route::match(['get', 'post'], '/{model}/{method}/{id?}', [CrudController::class, 'index'])
     ->defaults('id', '')
     ->defaults('config', $config_user);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-31
    • 2018-04-18
    • 1970-01-01
    • 2016-06-07
    • 2023-04-11
    • 2020-09-11
    相关资源
    最近更新 更多