具有动态前缀的Laravel动态路由

时间:2015-01-21 10:31:33

标签: php laravel routes prefix

我想使用以下方法在每个组路由之前添加customer_id。 customer_id设置为Session :: get('customer.id')。

Route::group(['prefix' => 'customer/{id}'], function($id) {
        Route::get('reports/default', array('as' => 'customer_reports_path', 'uses' => 'ReportController@getDefault'))->before('customer'); 
        Route::get('data/objects/{$object_id}', array('as' => 'customer_reports_object', 'uses' => 'DataController@getObject'));
});

第一条路线按预期工作,但是,我不知道如何正确使用第二条路线。

{{ HTML::link(route('customer_reports_object', [Session::get('customer.id'), $object_id], 'Object name') }}

该链接仍以404结尾。

2 个答案:

答案 0 :(得分:2)

@MichaelColeman是正确的$路线参数中不允许使用标志。这就是为什么:

路由参数由正则表达式找到,只匹配\w(单词),$不包括在内。

Illuminate\Routing\Route@compileRoute

$uri = preg_replace('/\{(\w+?)\?\}/', '{$1}', $this->uri);

解决方案显然是要删除$(这可能是首先输入的错字)

Route::get('data/objects/{object_id}'...

并正确生成链接。 (我还建议你使用link_to_route函数)

{{ link_to_route('customer_reports_object', 'Object name', [Session::get('customer.id'), $object_id]) }}

答案 1 :(得分:1)

尝试不使用参数中的$,即

Route::get('data/objects/{object_id}', array('as' => 'customer_reports_object', 'uses' => 'DataController@getObject'));