Laravel по-русски

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

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

#1 26.02.2016 10:50:15

Request и GET запрос

Здравствуйте. Нуждаюсь в небольшом ликбезе. Пытаюсь методом GET передать в контроллер параметр, например id. В контроллере принимаю таким образом:
public function getId(Request $request){
     dd($request->id);//Выводится нужный id
     dd($request->all());//Выводится массив, но в нем нет id
}
Далее мне нужно передать $request в Validator. Почему метод all() не возвращает id? И как мне его отправить в Validator?

Не в сети

#2 26.02.2016 11:40:39

duster
Откуда: Мельбурн
Сообщений: 148

Re: Request и GET запрос

Покажите route? Каким образом ID передается — как query параметр, или как часть URL?

Валидировать самый простой способ — сделать кастомный запрос php artisan make:request, заменить Request $request на этот новый класс, а там внутри класса Вам Laravel создаст метод rules() — там будут правила для валидатора

Не в сети

#3 26.02.2016 11:48:52

Re: Request и GET запрос

Route::get('/admin/toBasket/{id}', 'AdminController@toBasket')->where('id', '[0-9]+');
Да, передается как часть урла.

Не в сети

#4 26.02.2016 23:28:58

Re: Request и GET запрос

duster, сделал как вы говорили, с помощью make:request но передача методом гет все равно не работает.
public function rules()
    {
        return [
            'id' => 'required|numeric',
        ];
    }
отправляю так
<a href="{{ url('/admin/toBasket/'.$order['id']) }}">В корзину</a>
Возвращается ошибка что поле id обязательно для заполнения. Я так понимаю что это связано с тем, что для получаемой переменной не задан ключ id. Каким образом вообще валидироавать переменные полученные методом гет?

Не в сети

#5 27.02.2016 02:41:18

duster
Откуда: Мельбурн
Сообщений: 148

Re: Request и GET запрос

Так и думал — у Вас же ID в URL, не в параметрах.

Входные параметры (массив $request->all()) по определению — это GET/POST параметры (то что идет после? в адресе).

Параметр, замаскированный в URL — это не параметр GET, строго говоря.

Laravel такие значения вставляет в объект $request (что Вы уже и так нашли), еще они доступны как $request->route(’id’).

Валидировать можно в методе authorize() в созданном классе запроса. Можно сделать проверку is_int(), можно проверить есть ли права у юзера.

’required’ — бессмысленно проверять, раз юзер сюда попал по маршруту — значит ID указан. Иначе бы не сработал маршрут ☺

Не в сети

#6 27.02.2016 03:31:52

Re: Request и GET запрос

duster пишет:

'required' - бессмысленно проверять, раз юзер сюда попал по маршруту - значит ID указан. Иначе бы не сработал маршрут smile

Точно) И на numeric тоже, ведь в роуте прописан where)
А каким образом в методе Authorize мне получить данную переменную, чтобы проверить на is_int()?

Не в сети

#7 27.02.2016 06:09:48

duster
Откуда: Мельбурн
Сообщений: 148

Re: Request и GET запрос

Я же написал — два способа:

if (is_int($request->id)) {} или if (is_int($request->route(’id’))) {}

Первый способ — это magic property, второй более «точный»

Только получается что проверять то и не надо — маршрутизатор уже проверил ☺ Можно проверить — существующий ли ID, есть ли доступ на него и тд

Не в сети

#8 27.02.2016 07:41:25

Re: Request и GET запрос

Ясно, спасибо больое, вы мне очень помогли)

Не в сети

#9 29.02.2016 19:08:31

Re: Request и GET запрос

MadHatter пишет:

<a href="{{ url('/admin/toBasket/'.$order['id']) }}">В корзину</a>

а зачем он здесь использует функцию url() ? Почему не оставить просто <a href="/admin/toBasket/{{ $order['id']) }}">В корзину</a> ?

Не в сети

#10 01.03.2016 01:35:40

duster
Откуда: Мельбурн
Сообщений: 148

Re: Request и GET запрос

[quote=potMaster]
а зачем он здесь использует функцию url() ? Почему не оставить просто <a href="/admin/toBasket/This {{Action}} has wrong syntax and can’t be executed.">В корзину</a> ?[/quote]

Для гибкости лучше везде использовать хелпер url()

Это спасет если Laravel установлен в нестандартную папку (базовый путь скажем /laravel, а не /)

Не в сети

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