Laravel по-русски

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

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

#1 05.11.2016 14:04:31

Mick_20
Откуда: Кемерово
Сообщений: 39
Сайт

Валидация методом validate()

Написал простенькую форму добавления статей.
Работает! Статьи в базу добавляет.

Решил добавить проверку вводимых данных.
Добавил в метод store() код:

$this->validate($request, [
            'title' => 'required|unique|max:255',
            'alias' => 'required|unique|max:255',
            'excerpt' => 'required|unique|max:512',
            'content' => 'required',
        ]);

А также в представление с моей формой вывод ошибок:

@if (count($errors) > 0)
  <div class="alert alert-danger">
    <ul>
      @foreach ($errors->all() as $error)
        <li>{{ $error }}</li>
      @endforeach
    </ul>
  </div>
@endif

В итоге статьи перестали добавляться.
Если нажать на кнопку "Отправить" со пустыми полями, то выведет ошибки для всех полей, This field is required!

Если заполнить одно или все поля, то получаю данную ошибку: http://www.picshare.ru/view/7746811/

В чем может быть проблема?


Открываю для себя Laravel. Как бы не закрыть.

Не в сети

#2 05.11.2016 15:20:15

Re: Валидация методом validate()

Ну дак у тебя все поля required, значит все вводить и нужно. unique проверяет поле в базе и ему нужен параметр - таблица, где есть вводимое поле, например правило

'email' => 'unique:users'

значит, что поле email должно быть уникальным при проверке с полем email в таблице users.

И еще, рекомендую сразу привыкать использовать валидацию форм в Request классах, чтобы не засорять контроллеры (на русском не нашел, ссылка на  документацию на англ.):

https://laravel.com/docs/5.3/validation … validation

Изменено AlexeyMezenin (05.11.2016 15:21:38)

Не в сети

#3 07.11.2016 07:15:03

Re: Валидация методом validate()

Да вроде, есть и на русском.

http://laravel.su/docs/5.2/validation#f … validation

Не в сети

#4 07.11.2016 08:11:00

Mick_20
Откуда: Кемерово
Сообщений: 39
Сайт

Re: Валидация методом validate()

Оказывается все намного удобнее чем я думал. Спасибо большое.
Только почему-то не сработала валидация и опять ошибка:
Class App\Http\Controllers\ArticlesAddRequest does not exist

В шапке файла прописано use App\Http\Requests;
В чем тогда дело?

Код в контроллере:

public function store(Article $postModel, ArticlesAddRequest $request)
    {
        $postModel->create($request->all());
        return redirect()->route('articles');
    }

Код в реквесте:

class ArticlesAddRequest extends Request
{
...

    public function rules()
    {
        return [
            'title' => 'required|unique|max:255',
            'alias' => 'required|unique|max:255',
            'excerpt' => 'required|unique|max:512',
            'content' => 'required',
        ];
    }
}


Открываю для себя Laravel. Как бы не закрыть.

Не в сети

#5 07.11.2016 08:21:13

Re: Валидация методом validate()

А это "ArticlesAddRequest" в шапке прописано?

Не в сети

#6 07.11.2016 08:33:28

Re: Валидация методом validate()

Нужно сам класс добавить в начало контроллера:

use App\Http\Requests\ArticlesAddRequest;

Изменено AlexeyMezenin (07.11.2016 08:33:50)

Не в сети

#7 07.11.2016 09:12:09

Mick_20
Откуда: Кемерово
Сообщений: 39
Сайт

Re: Валидация методом validate()

AlexeyMezenin пишет:

Нужно сам класс добавить в начало контроллера:

use App\Http\Requests\ArticlesAddRequest;

Я пробовал подключать так.

В итоге при нажатии на кнопку Отправить выдал: Forbidden

Laravel изучаю на XAMPP


Открываю для себя Laravel. Как бы не закрыть.

Не в сети

#8 07.11.2016 09:17:38

Re: Валидация методом validate()

Батенька, давайте договоримся так :-)
Вы, пожалуйста, проверьте всю цепочку, есть ли файлы в папках, нет ли ошибок в написании имен классов, права доступа и т п.
Прошу учитывать, что коллеги не видят, что у Вас там, на самом деле, а гадать можно до бесконечности.

Не в сети

#9 07.11.2016 09:21:12

Re: Валидация методом validate()

В итоге при нажатии на кнопку Отправить выдал: Forbidden

Это уже другая ошибка. Как сказал Adrobim, лучше сразу показывать ошибку, тогда тебе без проблем сразу помогут. ) Ошибки нужно смотреть в storage\logs\laravel.log и в логе Apache (обычно в папке xampp\apache\logs).

Не в сети

#10 07.11.2016 09:26:22

Re: Валидация методом validate()

Еще проверьте, что там в action формы? Точно корректный адрес скрипта?
Mick_20, сначала надо локализовать ошибку, то есть определить, где она.
Это  - общее место!
"Forbidden" - это сервер, и надо, как пишет Алексей, смотреть логи сервера, а Вы, почему-то, начали править контроллер.
Если нет хотя бы общего понимания природы таких ошибок, примите совет - сделайте паузу, вернитесь назад! Не торопитесь вот так вот, сходу, решать практические задачи, применяя фреймворк, если не знаете базовых основ. Ларавел сегодня есть, а завтра нет, а то - вещи фундаментальные.
Прошу меня извинить, но на этот пост меня натолкнул характер Ваших вопросов.

Изменено Androbim (07.11.2016 09:36:14)

Не в сети

#11 07.11.2016 09:30:43

Mick_20
Откуда: Кемерово
Сообщений: 39
Сайт

Re: Валидация методом validate()

Androbim пишет:

Еще проверьте, что там в action формы? Точно корректный адрес скрипта?

Без валидации статьи добавляются


Открываю для себя Laravel. Как бы не закрыть.

Не в сети

#12 07.11.2016 09:43:23

Re: Валидация методом validate()

Mick_20 пишет:

Без валидации статьи добавляются

Посмотрите логи сервера

Ошибка 403 (Forbidden, доступ запрещен) может возникнуть по одной из нескольких причин:

-Вы выложили на сервер неправильный индексный файл. Файл главной страницы вашего сайта должен называться index.shtml, index.html, index.htm, index.phtml или index.php. Обратите внимание: все символы должны быть в нижнем регистре (В отличие от Windows, в ОС Linux, под управлением которой работает сервер, регистр имен файлов имеет значение, и файлы index.html и Index.html — это два абсолютно разных файла).

-Вы выставили неправильные права на папку, в которой находится запрашиваемый файл, или на какую-либо из ее родительских директорий. Все эти директории должны предоставлять права на выполнение (x) для владельца.

-Вы загрузили файлы сайта в неправильную папку. Войдите в свою контрольную панель в раздел «Хостинг / Домены / Мои домены» и посмотрите, что написано в столбце «Папка» напротив интересующего вас домена. Именно в эту папку и нужно загружать файлы сайта.

Не в сети

#13 07.11.2016 10:18:09

Mick_20
Откуда: Кемерово
Сообщений: 39
Сайт

Re: Валидация методом validate()

Androbim пишет:

Посмотрите логи сервера

В файле xampp\apache\logs\error.log никаких упоминаний Forbidden или ошибки 403 нет.


Androbim пишет:

-Вы выложили на сервер неправильный индексный файл. Файл главной страницы вашего сайта должен называться index.shtml, index.html, index.htm, index.phtml или index.php. Обратите внимание: все символы должны быть в нижнем регистре (В отличие от Windows, в ОС Linux, под управлением которой работает сервер, регистр имен файлов имеет значение, и файлы index.html и Index.html — это два абсолютно разных файла).

-Вы выставили неправильные права на папку, в которой находится запрашиваемый файл, или на какую-либо из ее родительских директорий. Все эти директории должны предоставлять права на выполнение (x) для владельца.

-Вы загрузили файлы сайта в неправильную папку. Войдите в свою контрольную панель в раздел «Хостинг / Домены / Мои домены» и посмотрите, что написано в столбце «Папка» напротив интересующего вас домена. Именно в эту папку и нужно загружать файлы сайта.

Сайт не на хостинге так что думаю тут дело не в домене и не в правах.

А вот вариант с индексным файлом не уверен. Он же находится в подкаталоге public.

Может стоит вынести папку laravel на уровень выше?


Открываю для себя Laravel. Как бы не закрыть.

Не в сети

#14 07.11.2016 10:26:58

Re: Валидация методом validate()

C XAMPP я ничем помочь не смогу, никогда не пользовался. Но не думаю, что дело в уровне папки - другие-то вещи работают...
Проверьте внимательно всю цепочку, и установите, в каком именно месте возникает ошибка.
В конце концов, если без добавленного класса все работает, добавьте исправленную валидацию прямо в контроллер, и посмотрите, как будет работать.

Изменено Androbim (07.11.2016 10:29:35)

Не в сети

#15 07.11.2016 10:27:10

Re: Валидация методом validate()

C XAMPP я ничем помочь не смогу, никогда не пользовался. Но не думаю, что дело в уровне папки - другие-то вещи работают...
Проверьте внимательно всю цепочку и установите, в каком именно месте возникает ошибка.
В конце концов, добавьте валидацию прямо в контроллер и посмотрите, как будет работать.

---Админ, это отправилось по ошибке, удалите, пожалуйста.

Изменено Androbim (07.11.2016 10:30:18)

Не в сети

#16 07.11.2016 14:15:49

TrueKanonir
Откуда: Ташкент
Сообщений: 221

Re: Валидация методом validate()

Если мне не изменяет память, то в реквестах есть еще метод authorize где стоит по дефолту false, и по этому вылазиет форбиден

Не в сети

#17 07.11.2016 14:29:39

Re: Валидация методом validate()

TrueKanonir пишет:

Если мне не изменяет память, то в реквестах есть еще метод authorize где стоит по дефолту false, и по этому вылазиет форбиден

Совершенно верно, забыл про это.  В большинстве случаев нужно просто вернуть true:

public function authorize()
{
    return true;
}

Не в сети

#18 09.11.2016 07:40:33

Re: Валидация методом validate()

Сделал это у себя, все работает. Действительно, до того, как

public function authorize()
{
    return true;
}

было forbidden

Не в сети

#19 09.11.2016 10:15:57

Mick_20
Откуда: Кемерово
Сообщений: 39
Сайт

Re: Валидация методом validate()

TrueKanonir пишет:

Если мне не изменяет память, то в реквестах есть еще метод authorize где стоит по дефолту false, и по этому вылазиет форбиден

Спасибо вам большое) Ошибка исчезла и валидация заработала.


Открываю для себя Laravel. Как бы не закрыть.

Не в сети

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