laravel 路由在复制时不起作用

laravel routes not work when is copied

您好,我将路由 5 到 8 从 1 复制到 4,但更改了几乎所有内容,包括路由名称和参数,但是当我调用时,我尝试使用新编辑,旧编辑仍然有效。 怎么了 ?它在我的路线中?

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

/*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'));

感谢帮助

问题是 Laravel...

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

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

一样URL

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() 和仅用于数字的正则表达式。

这意味着如果您输入 URL programacao/foo/bar/test/2015 它将使用 programacao.mostrar 路线。如果第 4 个参数包含数字以外的内容,将使用 programacao.updateinfo

注意需要声明更受限制的路由(在本例中programacao.mostrar 另一条路线之前。因为 Laravel 按照他们注册的顺序通过路由。