Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Это не Laravel определяет, а браузер. Если маршрут в action не задан, то отправка производится по адресу страницы. Get это или Post определяет атрибут method. Если и method не задан, то используется Get.
Понял, спасибо
Всё понял, спасибо
Кстати, если я делаю 2 роута с одинаковым URI, но с разными методами вызова - для показа формы get, для обработки post, то laravel не путается и однозначно определяет маршрут, который следует выполнить при вызове из адресной строки (соответственно, get), и по имени роута изнутри. Но вот вопрос, если я в самой форме не буду делать метод "action" вообще, каким образом laravel "узнаёт", что данные для обработки вызываемого метода в маршруте с post нужно взять из маршрута с get? Я правильно понял, что в таком случае вызов формы и её обработка как раз связаны этим одинаковым URI?
Просто сейчас вот изучаю, как, например, делать авторизацию.
В первом маршруте указан вызов формы в методе контроллера:
Route::get('/login', 'Auth\LoginController@showLoginForm');
во втором обработка:
Route::post('/login', 'Auth\LoginController@login')->name('login');
И я не могу понять, как они связаны, ведь в методе обработки формы никаких указателей на саму форму нет. И в самой форме на роут с методом обработки тоже. Неужели потому что у них одинаковый URI?
В общем, примерно понял почему так и как это работает. Если обращение к маршруту идёт изнутри кода, то ссылка на имя маршрута. Если же из адресной строки, то ссылка на этот URI. Например, форму можно было бы задать так:
<form class="form-signin" method="post" action="имя_сайта/My">
и выполнился бы маршрут с URI '/My', который поэтому должен быть уникальным. Верно?
Как по вашему, после отпраки данных, Laravel должен будет понять к какому контроллеру вы хотите обратиться? К aaa или bbb?
Ну, я так понимаю, по имени маршрута, 'as' => 'aaa' или 'as' => 'bbb'. Ну, или если в другом формате записать:
Route::post('/My', 'MyController@aaa')->name('aaa');
Route::post('/My', 'MyController@bbb')->name('bbb');
А ссылка одна и та же, контроллер один и тот же, просто методы в нём выполняются разные. Такого разве не может быть?
Я вот так понимаю, как это работает: по ссылке на имя маршрута ищется этот маршрут, а сам URI может быть каким угодно. Этот URI он что вообще определяет? Я подставляю туда кракозябру вообще, ни папки такой с какими-то скриптами, ни исполняемых фалов таких нет. Иначе говоря, внешне только видно, что формируется просто адресная строка без каких-либо действий. Так вот какой в нём тайный смысл в URI этом?
Спасибо за ответ. Это понятно, что пути обхода можно разные придумать, но это "огород", имхо. Да и вообще, наверное, в самой форме давать ссылку на маршрут безграмотно?
Вопрос-то в другом, в чём ошибка такой логики вообще?
Есть несколько форм запроса, каждая обрабатывается определённым методом одного (для всех этих методов) контроллера. Обращения к методам контроллера задаётся в самой форме запроса. При попытке прописать роуты с одним и тем же URI, но с разными именами выпадает ошибка Route [имя роута] not defined.
Причём, если в запросы прописать обращение только к последнему роуту в файле маршрутов, то ошибки нет.
Обращение к роуту:
<form class="form-signin" method="post" action="{{route('имя роута')}}"> // Например, route('ааа')
Контроллер:
class MyController extends Controller
{
public function aaa(Request $request){
print ('route A');
}
public function bbb(Request $request){
print ('route B');
}
}
Роуты:
Route::post('/My', array('as' => 'aaa', 'uses' => 'MyController@aaa'));
Route::post('/My', array('as' => 'bbb', 'uses' => 'MyController@bbb'));
Причём, если указать в форме запроса имя роута "bbb", либо в "aaa" изменить URI, то ошибки не возникает.
Как работает эта схема вообще, подскажите, плз. Мне не нужно, чтобы у меня в адресной строке URI менялся, можно без него в данном случае вообще обойтись?
Страницы 1