Публикации - Laravel

HMVC в Laravel - Request

В PHP $_REQUEST - переменные запроса. Соответственно класс Request в Laravel предназначен для валидации запроса.

Создать Request-класс можно с помощью специальной artisan-команды:

 php artisan make:request NewsRequest

Данная команда создаст файл с именем NewsRequest в папке app/http/requests. Файл содержит два метода authorize() и rules() в соотвествующем классе NewsRequest.

Метод authorize() должен возвращать либо false либо true. False - закрывает доступ к данным, true - разрешает. По умолчанию стоит false. Поэтому, первое, что необходимо сделать, это изменить значение на true. Метод rules() возвращает массив правил.

public function authorize(){
 return true;
}
public function rules(){
 return [
  'name'=> 'required'
 ]
}

Все правила валидации, используемые в rules() прописаны в файле resources/lang/validation.php. Все элементы массива, которые есть в этом файле, можно использовать в качестве правил в request-файлах. Еще пример, с множественной валидацией:

public function rules()
 {
   return [
      'name'=>'required|max:100',
      'body' => 'required|min:2',
      'theme_id'=>'required|numeric'
   ];
 }

В модели, к которой мы хотим привязать эти request-данные, должно быть определено свойство $fillable, в котором мы указываем, какие имена полей таблицы будут задействованы при множественной вставки данных.

class News extends Model
{
    protected $table = 'news';
    protected $fillable = [
        'name',
        'body',
        'user_id',
        'theme_id',
    ];
}

Теперь рассмотрим контроллер, который будет перехватывать данные из request-запроса, и через модель, с помощью множественной вставки (метод create()) помещать их в таблицу news:

namespace App\Http\Controllers;
use Auth;
use App\Http\Requests;

class CabinetController extends Controller
{ 
    public function postIndex(Requests\NewsRequest $r){
       $r['user_id'] = Auth::user()->id;
       News::create($r->all());
       return redirect('cabinet');
    }
}

При этом важно помнить, что имена полей в таблице должны совпадать с именами элементов форм.

В шаблоне мы можем перехватывать ошибки валидации (волшебство laravel заключается в том, что специально эти ошибки в шаблон передавать не надо):

@if (count($errors) > 0)
 Whoops!Найденыследующиеошибки. 
 @foreach ($errors->all() as $error) 
  {{ $error }} 
 @endforeach 
@endif 

Перевести ошибки на русский язык просто. Для этого в конфигурационном файле app.php, в настройках локал и укажем ru.

'locale' => 'ru',

После чего создадим в папке resources/lang еще одну папку – ru. В ее можно вставить скопированный файл en/validation.php. И перевести на русский язык необходимые ошибки. При этомом слова, начинающиеся с : (двоеточия) не переводим, т.к. это атрибуты.

Элементы полей также нужно перевести на русский язык. Для этого в файле validation.php есть элемент массива attributes. Переведем элементы формы здесь:

'attributes' => ['name'=>'наименование', 'body'=>'содержимое', 'theme_id'=>'тема'],

Теперь ошибки валидации выглядят так:

Количество комментариев: 0

Для того, чтобы оставить коментарий необходимо зарегистрироваться


Изображения Видео

1. Подключение CKEditor https://artisansweb.net/install-use-ckeditor-laravel/#comments
2. Регистрация и авторизация https://know-online.com/post/laravel-reg
3. Что нового в Laravel 8 https://sergeymukhin.com/blog/chto-novogo-v-laravel-80
4. Авторизация Sanctum <iframe width="560" height="315" src="https://www.youtube.com/embed/MT-GJQIY3EU" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>