Laravel переопределяет маршрут и берет неправильный

У меня это определено в файле 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')); 

Как может Laravel узнать разницу между ними, когда что-то попало /gestionAdministrador ?

Он всегда будет считать первым.

Имя, которое вы установили 'as' => 'RegistrarAdministrador' будет использоваться для создания URL-адресов на основе этого имени маршрута, только когда URL-адрес (браузер, завиток …) попадает в URL-адрес, единственным способом их дифференциации является

1) URL

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

EDIT 2

То, что вам действительно нужно понять, – это то, что имя, которое вы передаете маршруту ('as' => 'name'), не будет частью вашего URL-адреса, поэтому это не то, что Laravel может использовать для дифференциации ваших двух URls, это только для внутреннего использования, для определения ваших маршрутов при создании URL-адресов. Итак, эти инструкции:

 $loguearse = URL::route('Loguearse'); $registrar = URL::route('RegistrarAdministrador'); 

Создает точно такой же URL-адрес:

 http://yourserver.dev/gestionAdministrador 

ИЗМЕНИТЬ 1 – ОТВЕЧАЕТ КОММЕНТАРИЙ

Перенаправление в Laravel легко, в вашем контроллере, после обработки вашей формы, в любом из ваших методов вы можете просто:

 return Redirect::to('/'); 

или

 return Redirect::route('home'); 

Имея маршрут, подобный этому:

 Route::get('/', array('as' => 'home', 'uses' => 'HomeController@index')); 

Итак, ваш контроллер будет выглядеть так:

 class AdministradorController extends Controller { public function RegistrarAdministrador() { ... return Redirect::route('home'); } public function Login() { ... return Redirect::route('home'); } } 

На самом деле у вас есть только один маршрут в вашей коллекции маршрутов, потому что:

У вас есть следующие маршруты:

 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 и т. Д.), И в каждом методе доступен только один уникальный URL , потому что это что-то вроде этого:

 $routes['post']['someUrl'] = 'a route'; $routes['post']['someUrl'] = 'a route'; 

Итак, в вашем случае последний заменяет первый, и в этом случае вы можете использовать разные методы для объявления двух маршрутов с использованием того же URL чтобы он был в другом массиве, примерно так:

 $routes['post']['someUrl'] = 'a route'; $routes['put']['someUrl'] = 'a route'; // Route::put(...) 

Должен быть способ перейти к одному и тому же URL из двух разных форм

Да, есть способ, и просто вам нужно использовать тот же маршрут, что и действие вашей формы, и поэтому вам не нужно декларировать его дважды.

Что вы хотите сделать, это плохая идея, вы не должны регистрироваться и регистрироваться с одного и того же маршрута. С этим сказал, что вы говорите, на самом деле невозможно. Маршрутизация в Ларавеле сначала осуществляется первым. В основном он проверяет маршрут, пока URI не соответствует одному, а затем вызывает этот метод на контроллере или выполняет обратный вызов. Ваши маршруты должны быть другим способом в вашем файле маршрутов. Это будет исправлено путем изменения URL-адреса.