Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Re: Хорошие практики (FAQ) » Связь формы с маршрутом » 22.06.2018 12:56:33

Это не Laravel определяет, а браузер. Если маршрут в action не задан, то отправка производится по адресу страницы. Get это или Post определяет атрибут method. Если и method не задан, то используется Get.

Понял, спасибо smile

#2 Re: Хорошие практики (FAQ) » Связь формы с маршрутом » 22.06.2018 11:52:47

Всё понял, спасибо smile

Кстати, если я делаю 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?

#3 Re: Хорошие практики (FAQ) » Связь формы с маршрутом » 22.06.2018 10:30:33

В общем, примерно понял почему так и как это работает. Если обращение к маршруту идёт изнутри кода, то ссылка на имя маршрута. Если же из адресной строки, то ссылка на этот URI. Например, форму можно было бы задать так:
<form class="form-signin" method="post" action="имя_сайта/My">
и выполнился бы маршрут с URI '/My', который поэтому должен быть уникальным. Верно?

#4 Re: Хорошие практики (FAQ) » Связь формы с маршрутом » 22.06.2018 10:00:24

Как по вашему, после отпраки данных, Laravel должен будет понять к какому контроллеру вы хотите обратиться? К aaa или bbb?

Ну, я так понимаю, по имени маршрута, 'as' => 'aaa' или 'as' => 'bbb'. Ну, или если в другом формате записать:
Route::post('/My', 'MyController@aaa')->name('aaa');
Route::post('/My', 'MyController@bbb')->name('bbb');
А ссылка одна и та же, контроллер один и тот же, просто методы в нём выполняются разные. Такого разве не может быть?

Я вот так понимаю, как это работает: по ссылке на имя маршрута ищется этот маршрут, а сам URI может быть каким угодно. Этот URI он что вообще определяет? Я подставляю туда кракозябру вообще, ни папки такой с какими-то скриптами, ни исполняемых фалов таких нет. Иначе говоря, внешне только видно, что формируется просто адресная строка без каких-либо действий. Так вот какой в нём тайный смысл в URI этом?

#5 Re: Хорошие практики (FAQ) » Связь формы с маршрутом » 22.06.2018 07:47:01

Спасибо за ответ. Это понятно, что пути обхода можно разные придумать, но это "огород", имхо. Да и вообще, наверное, в самой форме давать ссылку на маршрут безграмотно?
Вопрос-то в другом, в чём ошибка такой логики вообще?

#6 Хорошие практики (FAQ) » Связь формы с маршрутом » 20.06.2018 15:18:16

SeriyKot
Ответов: 10

Есть несколько форм запроса, каждая обрабатывается определённым методом одного (для всех этих методов) контроллера. Обращения к методам контроллера задаётся в самой форме запроса. При попытке прописать роуты с одним и тем же 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 менялся, можно без него в данном случае вообще обойтись?

Подвал раздела