Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Страницы 1
Написал простенькую форму добавления статей.
Работает! Статьи в базу добавляет.
Решил добавить проверку вводимых данных.
Добавил в метод 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. Как бы не закрыть.
Не в сети
Ну дак у тебя все поля required, значит все вводить и нужно. unique проверяет поле в базе и ему нужен параметр - таблица, где есть вводимое поле, например правило
'email' => 'unique:users'
значит, что поле email должно быть уникальным при проверке с полем email в таблице users.
И еще, рекомендую сразу привыкать использовать валидацию форм в Request классах, чтобы не засорять контроллеры (на русском не нашел, ссылка на документацию на англ.):
https://laravel.com/docs/5.3/validation … validation
Изменено AlexeyMezenin (05.11.2016 15:21:38)
Не в сети
Да вроде, есть и на русском.
Не в сети
Оказывается все намного удобнее чем я думал. Спасибо большое.
Только почему-то не сработала валидация и опять ошибка:
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. Как бы не закрыть.
Не в сети
А это "ArticlesAddRequest" в шапке прописано?
Не в сети
Нужно сам класс добавить в начало контроллера:
use App\Http\Requests\ArticlesAddRequest;
Изменено AlexeyMezenin (07.11.2016 08:33:50)
Не в сети
Нужно сам класс добавить в начало контроллера:
use App\Http\Requests\ArticlesAddRequest;
Я пробовал подключать так.
В итоге при нажатии на кнопку Отправить выдал: Forbidden
Laravel изучаю на XAMPP
Открываю для себя Laravel. Как бы не закрыть.
Не в сети
Батенька, давайте договоримся так :-)
Вы, пожалуйста, проверьте всю цепочку, есть ли файлы в папках, нет ли ошибок в написании имен классов, права доступа и т п.
Прошу учитывать, что коллеги не видят, что у Вас там, на самом деле, а гадать можно до бесконечности.
Не в сети
В итоге при нажатии на кнопку Отправить выдал: Forbidden
Это уже другая ошибка. Как сказал Adrobim, лучше сразу показывать ошибку, тогда тебе без проблем сразу помогут. ) Ошибки нужно смотреть в storage\logs\laravel.log и в логе Apache (обычно в папке xampp\apache\logs).
Не в сети
Еще проверьте, что там в action формы? Точно корректный адрес скрипта?
Mick_20, сначала надо локализовать ошибку, то есть определить, где она.
Это - общее место!
"Forbidden" - это сервер, и надо, как пишет Алексей, смотреть логи сервера, а Вы, почему-то, начали править контроллер.
Если нет хотя бы общего понимания природы таких ошибок, примите совет - сделайте паузу, вернитесь назад! Не торопитесь вот так вот, сходу, решать практические задачи, применяя фреймворк, если не знаете базовых основ. Ларавел сегодня есть, а завтра нет, а то - вещи фундаментальные.
Прошу меня извинить, но на этот пост меня натолкнул характер Ваших вопросов.
Изменено Androbim (07.11.2016 09:36:14)
Не в сети
Еще проверьте, что там в action формы? Точно корректный адрес скрипта?
Без валидации статьи добавляются
Открываю для себя Laravel. Как бы не закрыть.
Не в сети
Без валидации статьи добавляются
Посмотрите логи сервера
Ошибка 403 (Forbidden, доступ запрещен) может возникнуть по одной из нескольких причин:
-Вы выложили на сервер неправильный индексный файл. Файл главной страницы вашего сайта должен называться index.shtml, index.html, index.htm, index.phtml или index.php. Обратите внимание: все символы должны быть в нижнем регистре (В отличие от Windows, в ОС Linux, под управлением которой работает сервер, регистр имен файлов имеет значение, и файлы index.html и Index.html — это два абсолютно разных файла).
-Вы выставили неправильные права на папку, в которой находится запрашиваемый файл, или на какую-либо из ее родительских директорий. Все эти директории должны предоставлять права на выполнение (x) для владельца.
-Вы загрузили файлы сайта в неправильную папку. Войдите в свою контрольную панель в раздел «Хостинг / Домены / Мои домены» и посмотрите, что написано в столбце «Папка» напротив интересующего вас домена. Именно в эту папку и нужно загружать файлы сайта.
Не в сети
Посмотрите логи сервера
В файле xampp\apache\logs\error.log никаких упоминаний Forbidden или ошибки 403 нет.
-Вы выложили на сервер неправильный индексный файл. Файл главной страницы вашего сайта должен называться index.shtml, index.html, index.htm, index.phtml или index.php. Обратите внимание: все символы должны быть в нижнем регистре (В отличие от Windows, в ОС Linux, под управлением которой работает сервер, регистр имен файлов имеет значение, и файлы index.html и Index.html — это два абсолютно разных файла).
-Вы выставили неправильные права на папку, в которой находится запрашиваемый файл, или на какую-либо из ее родительских директорий. Все эти директории должны предоставлять права на выполнение (x) для владельца.
-Вы загрузили файлы сайта в неправильную папку. Войдите в свою контрольную панель в раздел «Хостинг / Домены / Мои домены» и посмотрите, что написано в столбце «Папка» напротив интересующего вас домена. Именно в эту папку и нужно загружать файлы сайта.
Сайт не на хостинге так что думаю тут дело не в домене и не в правах.
А вот вариант с индексным файлом не уверен. Он же находится в подкаталоге public.
Может стоит вынести папку laravel на уровень выше?
Открываю для себя Laravel. Как бы не закрыть.
Не в сети
C XAMPP я ничем помочь не смогу, никогда не пользовался. Но не думаю, что дело в уровне папки - другие-то вещи работают...
Проверьте внимательно всю цепочку, и установите, в каком именно месте возникает ошибка.
В конце концов, если без добавленного класса все работает, добавьте исправленную валидацию прямо в контроллер, и посмотрите, как будет работать.
Изменено Androbim (07.11.2016 10:29:35)
Не в сети
C XAMPP я ничем помочь не смогу, никогда не пользовался. Но не думаю, что дело в уровне папки - другие-то вещи работают...
Проверьте внимательно всю цепочку и установите, в каком именно месте возникает ошибка.
В конце концов, добавьте валидацию прямо в контроллер и посмотрите, как будет работать.
---Админ, это отправилось по ошибке, удалите, пожалуйста.
Изменено Androbim (07.11.2016 10:30:18)
Не в сети
Если мне не изменяет память, то в реквестах есть еще метод authorize где стоит по дефолту false, и по этому вылазиет форбиден
Не в сети
Если мне не изменяет память, то в реквестах есть еще метод authorize где стоит по дефолту false, и по этому вылазиет форбиден
Совершенно верно, забыл про это. В большинстве случаев нужно просто вернуть true:
public function authorize()
{
return true;
}
Не в сети
Сделал это у себя, все работает. Действительно, до того, как
public function authorize()
{
return true;
}
было forbidden
Не в сети
Если мне не изменяет память, то в реквестах есть еще метод authorize где стоит по дефолту false, и по этому вылазиет форбиден
Спасибо вам большое) Ошибка исчезла и валидация заработала.
Открываю для себя Laravel. Как бы не закрыть.
Не в сети
Страницы 1