我在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'))}}
我不知道为什么当我提交表单时采用第二条路线而不是第一条路线,即使我指向第一条路线。
必须有一种方法可以从两种不同的形式转到同一个网址,这就是我想要的。
答案 0 :(得分:3)
如果您有两条路径具有完全相同的URI且方法相同:
Route::post('gestionAdministrador', array('as' => 'Loguearse', 'uses' => 'AdministradorController@Login'));
Route::post('gestionAdministrador', array('as' => 'RegistrarAdministrador', 'uses' => 'AdministradorController@RegistrarAdministrador'));
当某些事情发生时,Laravel如何知道它们之间的区别?{/ 1}?
它总是假定第一个。
您设置的名称/gestionAdministrador
将用于创建基于该路由名称的URL,仅当某些内容(浏览器,卷曲...)点击URL时,区分它们的唯一方法是
1)网址
2)网址参数(基本上是数字1加参数)
3)方法(GET,POST)
所以你可以将它们改为:
'as' => 'RegistrarAdministrador'
编辑2
您真正需要了解的是,您为路线命名的名称('as'=>'name')将不会成为您网址的一部分,因此这不是Laravel可以用来区分您的两个URls,仅供内部使用,用于在创建URL期间识别您的路由。那些,那些指示:
Route::post('gestionAdministrador/loguearse', array('as' => 'Loguearse', 'uses' => 'AdministradorController@Login'));
Route::post('gestionAdministrador/registrar', array('as' => 'RegistrarAdministrador', 'uses' => 'AdministradorController@RegistrarAdministrador'));
会生成完全相同的网址:
$loguearse = URL::route('Loguearse');
$registrar = URL::route('RegistrarAdministrador');
编辑1 - 回答评论
在Laravel中重定向很容易,在您的控制器中,在处理完表单后,您可以使用任何方法:
http://yourserver.dev/gestionAdministrador
或
return Redirect::to('/');
有这样一条路线:
return Redirect::route('home');
所以,你的控制器看起来像这样:
Route::get('/', array('as' => 'home', 'uses' => 'HomeController@index'));
答案 1 :(得分:3)
您声明了以下路线:
Route::post('gestionAdministrador', array('as' => 'Loguearse', 'uses' => 'AdministradorController@Login'));
Route::post('gestionAdministrador', array('as' => 'RegistrarAdministrador', 'uses' => 'AdministradorController@RegistrarAdministrador'));
这两种方法都使用了post
方法,这是post
方法:
public function post($uri, $action)
{
return $this->addRoute('POST', $uri, $action);
}
它会调用addRoute
,现在是:
protected function addRoute($methods, $uri, $action)
{
return $this->routes->add($this->createRoute($methods, $uri, $action));
}
此处$this->routes->add
表示Illuminate\Routing\RouteCollection::add()
,add()
方法调用addToCollections()
,如下所示:
protected function addToCollections($route)
{
foreach ($route->methods() as $method)
{
$this->routes[$method][$route->domain().$route->getUri()] = $route;
}
$this->allRoutes[$method.$route->domain().$route->getUri()] = $route;
}
$routes
是一个数组(protected $routes = array();
),很明显路由按methods
(GET / POST等)分组,每种方法只有一个唯一{ {1}}可以使用,因为它是这样的:
URL
所以,在你的情况下,最后一个替换第一个,在这种情况下,你可以使用不同的方法使用相同的$routes['post']['someUrl'] = 'a route';
$routes['post']['someUrl'] = 'a route';
声明两个路由,所以它将在不同的数组中,如下所示:< / p>
URL
必须有办法从两种不同的形式转到同一个网址
是的,有一种方法,只是您必须使用与表单操作相同的路线,因此,您不需要声明它两次。
答案 2 :(得分:1)
您想要做的是一个坏主意,您不应该登录并从同一路线注册。说到你说的话真的不可能。 Laravel的路线先到先得。基本上它检查路由,直到URI匹配一个,然后在控制器上调用该方法或执行回调。您的路线必须是路线文件中的另一种方式。这将通过更改网址来解决。