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