【问题标题】:How to address variable number of arguments in laravel routes to controllers如何在laravel路由中处理可变数量的参数到控制器
【发布时间】:2020-06-13 02:33:04
【问题描述】:

我是 Laravel 的新手,我为我的路线做了这样的事情:

Route::get('/fundraisers/{id}', 'FundraiserController@index')->name('fundraisers.list');
Route::get('/{locale}/fundraisers/{id}', 'FundraiserController@indexLang')->name('fundraisers.list.lang')->where(['locale'=>$loc=['fr,'zh']);

然后我需要在我的控制器中使用两种方法:

index($id) {
   // Load record by id and language == 'en'
}

indexLang($locale, $id) {
   // Load record by id and language == $locale
}

我在别处读到,如果我希望英文 url 成为唯一不出现在 url 中的例外,则无法明确编写两条路由规则。

现在当我写这样一条路线时:

Route::get('/fundraisers/{id}', 'FundraiserController@indexLang')->name('fundraisers.list');

发生的情况是$locale 是一个数字,而$idindexLang 中为空。有没有办法将{id} 分配给$_REQUEST['id'] 并取消设置$_REQUEST['locale']?就像使用.htaccess url 重写规则一样?这样我就可以摆脱index($id),因为它是indexLang的冗余异常

【问题讨论】:

    标签: laravel


    【解决方案1】:

    我认为您的第一次尝试没有任何问题,除了 where 需要是正则表达式。

    Route::get('/{locale}/fundraisers/{id}', 'FundraiserController@indexLang')->name('fundraisers.list.lang')->where(['locale' => 'fr|zh']);

    那就试试吧。

    第二次尝试“$locale 是一个数字,$id 为空”的原因是因为您只在路由中捕获一个,即'/fundraisers/{id}',然后将其传递给控制器​​的第一个变量,在这种情况下$locale

    【讨论】:

      猜你喜欢
      • 2020-09-01
      • 2015-08-13
      • 1970-01-01
      • 2015-07-06
      • 2020-02-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多