【问题标题】:check parameters type before run route in laravel 5在laravel 5中运行路线之前检查参数类型
【发布时间】:2018-05-15 13:29:27
【问题描述】:

我有 2 种在路上。

像这样:

你知道这些:

Route::get('/{category_slug}/{article_slug}', 'mController@list');

Route::get('/{category_slug}/{subcategory_slug?}', 'mController@clist');

它只运行第一条路线。

我尝试在 RouteServiceProvider boot(){

中绑定它们
Route::bind('category_slug', function ($category_slug, $route) {dd('category_slug') }); //works

Route::bind('article_slug', function ($article_slug, $route) { dd('article_slug') }); //works for both article_slug(ok!) and subcategory_slug(wrong!)

Route::bind('subcategory_slug', function ($subcategory_slug, $route) { dd('subcategory_slug') }); //not works 

}

有没有办法在加载路线之前检查 {article_slug} 或 {subcategory_slug} 然后系统选择正确的路线?例如,如果第一个错误,则跳过它并尝试运行第二个路线。

例如中间件可以做到吗?

【问题讨论】:

  • 参数只是占位符,您不能真正使用它们将路由重定向到控制器。你不能改用其他路线吗?
  • @pseudoanime 我想创建这样的 URL:example.com/cat/subcat1_slug/subcat2_slug.../subcatN_slug/article_slug ...我每小时搜索谷歌,但找不到解决方案。所以我想也许我可以通过顶级方式......

标签: php laravel laravel-routing laravel-middleware


【解决方案1】:

在 Laravel 中,每个表中的 slug 都是唯一的,而不是在所有表中都是唯一的。我建议使用关键字之类的东西来确定预期的 slug。与查询以确定 slug 是否属于 articlecategory 类型的对象相比,这更有效、更清晰。

Route::get('/{category_slug}/', 'mController@clist');
Route::get('/{category_slug}/sub/{subcategory_slug}', 'mController@clist');
Route::get('/{category_slug}/sub/{subcategory_slug}/{article_slug}', 'mController@list');
Route::get('/{category_slug}/{article_slug}', 'mController@list');

【讨论】:

    【解决方案2】:

    您需要使用不同的 url 或不同的请求方式来满足您的需求。

    喜欢-

    Route::get('/{category_slug}/{article_slug}', 'mController@list');
    Route::post('/{category_slug}/{subcategory_slug?}', 'mController@clist');
    

    如果需要修改数据库中已有的数据,请使用Route::update(),如果需要删除数据库中的数据,请使用Request::delete()

    或者像tprj29的回答你需要使用不同类型的url

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-14
      • 2014-05-22
      • 2017-07-06
      相关资源
      最近更新 更多