我在我的 routes.php 文件中定义了这个
Route::post('gestionAdministrador', array('as' => 'Loguearse', 'uses' => 'AdministradorController@Login'));
Route::post('gestionAdministrador', array('as' => 'RegistrarAdministrador', 'uses' => 'AdministradorController@RegistrarAdministrador'));
在我的 login.blade.php 文件中,表单是这样开始的
{{ Form::open(array('route'=>'Loguearse'))}}
我不知道为什么当我提交表单时采用第二条路线而不是第一条路线,即使我指向第一条路线。
必须有一种方法可以从两种不同的形式转到相同的 url,这就是我想要的。
最佳答案
如果您有两个具有完全相同的 URI 和相同方法的路由:
Route::post('gestionAdministrador', array('as' => 'Loguearse', 'uses' => 'AdministradorController@Login'));
Route::post('gestionAdministrador', array('as' => 'RegistrarAdministrador', 'uses' => 'AdministradorController@RegistrarAdministrador'));
当某些东西命中 /gestionAdministrador
时,Laravel 如何知道它们之间的区别?
它总是假设第一个。
您设置的名称 'as' => 'RegistrarAdministrador'
将用于基于该路由名称创建 URL,仅当某些内容(浏览器、curl...)访问 URL 时区分它们的唯一方法是通过
1) 网址
2) URL 参数(基本上是数字 1 加参数)
3)方法(GET、POST)
因此您可以将它们更改为:
Route::post('gestionAdministrador/loguearse', array('as' => 'Loguearse', 'uses' => 'AdministradorController@Login'));
Route::post('gestionAdministrador/registrar', array('as' => 'RegistrarAdministrador', 'uses' => 'AdministradorController@RegistrarAdministrador'));
编辑 2
你真正需要了解的是你给路由的名称 ('as' => 'name') 不会成为你的 url 的一部分,所以这不是 Laravel 可以用来区分你的两个 URl 的东西,这仅供内部使用,用于在创建 URL 期间识别您的路由。所以,这些说明:
$loguearse = URL::route('Loguearse');
$registrar = URL::route('RegistrarAdministrador');
将生成完全相同的 URL:
http://yourserver.dev/gestionAdministrador
编辑 1 - 回答评论
在 Laravel 中重定向很容易,在你的 Controller 中,在处理你的表单之后,在你的任何方法中你可以:
return Redirect::to('/');
或
return Redirect::route('home');
有这样一条路线:
Route::get('/', array('as' => 'home', 'uses' => 'HomeController@index'));
因此,您的 Controller 将如下所示:
class AdministradorController extends Controller {
public function RegistrarAdministrador()
{
...
return Redirect::route('home');
}
public function Login()
{
...
return Redirect::route('home');
}
}
关于php - Laravel 重写命名路由并采用错误的路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22467677/