laravel路由在复制时不起作用

时间:2015-01-05 18:54:24

标签: laravel laravel-4

嗨我将路线5到8从1复制到4但是改变几乎所有内容包括路线名称和args,但是当我打电话时我尝试使用旧编辑旧的工作。 怎么了 ?它在我的路线?

如果我删除旧的有效,但是现在这不是一个选项,我必须保留两者。

/*edit old*/
    Route::get('programacao/{localizacao}/{anoatual}/{cliente}/{programacao}/{item}/edit', array('as' => 'programacao.edit', 'uses' => 'ProgramacaoController@edit'));
    Route::post('programacao/atualizar', array('as' => 'programacao.update','uses' => 'ProgramacaoController@update'));

    Route::get('programacao/{localizacao}/{anoatual}/{cliente}/{programacao}', array('as' => 'programacao.show', 'uses' => 'ProgramacaoController@show'));
    Route::post('programacao/atualizarinfo', array('as' => 'programacao.updateinfo','uses' => 'ProgramacaoController@updateinfo'));



/*edit new*/
    Route::get('programacao/{go}/{localizacao}/{cliente}/{ano}/{item}/edicao', array('as' => 'programacao.edicao', 'uses' => 'ProgramacaoController@edicao'));
    Route::post('programacao/atualizacao', array('as' => 'programacao.atualizacao','uses' => 'ProgramacaoController@atualizacao'));

    Route::get('programacao/{go}/{localizacao}/{cliente}/{ano}', array('as' => 'programacao.mostrar', 'uses' => 'ProgramacaoController@mostrar'));
    Route::post('programacao/atualizarinformacao', array('as' => 'programacao.updateinformacao','uses' => 'ProgramacaoController@updateinformacao'));

请求帮助

1 个答案:

答案 0 :(得分:1)

问题在于Laravel ......

programacao/{go}/{localizacao}/{cliente}/{ano}

programacao/{localizacao}/{anoatual}/{cliente}/{programacao}

是相同的网址

programacao/{param1}/{param2}/{param3}/{param4}

你怎么能改变它?

最简单的方法是改变不同路线的非动态部分(不是参数的部分)。

以下是一个例子:

Route::get('programacao-new/{go}/{localizacao}/{cliente}/{ano}', ...)
Route::get('programacao/{localizacao}/{anoatual}/{cliente}/{programacao}', ...)

(显然你会选择更具描述性的东西-new

或者,您可以使用正则表达式来限制路径参数。

我认为ano是一年,所以我们只过滤数字:

Route::get('programacao/{go}/{localizacao}/{cliente}/{ano}', array(
    'as' => 'programacao.mostrar',
    'uses' => 'ProgramacaoController@mostrar'
))->where('ano', '[0-9]+');

正如您所看到的,我添加了where()和仅用于数字的正则表达式。

这意味着如果您输入网址programacao/foo/bar/test/2015,则会使用programacao.mostrar路由。如果第4个参数包含的不是数字,则将使用programacao.updateinfo

注意 更受限制的路由(在这种情况下为programacao.mostrar)需要在之前声明其他路由。因为Laravel按照他们注册的顺序浏览路线。