Собственные сообщения об ошибках валидации форм OctoberCMS

Во время разработки модели данных OctoberCMS при необходимости, можно использовать собственные сообщения об ошибках валидации полей формы вместо сообщения The :attribute field is required. по-умолчанию. В статье показывается как, достаточно просто, это делается.

Допустим у нас есть модель "Публикация". В ней присутствуют обязаетельные поля для заполнения: "Авторы" и "Название". Чтобы сделать автоматическую валидацию с собственными сообщениями об ошибках при сохранении записей в базу данных OctoberCMS необходимо в класс нашей модели добавить:

  • Трейт \October\Rain\Database\Traits\Validation
  • Свойство public $rules - массив, где ключом является поле базы данных, а его значеним правило валидации OctoberCMS.
  • Свойство public $customMessages - массив, где ключом является поле базы данных и правило валидации через точку, а значеним ключа - собственные сообщение.
/**
 * Publication Model
 */
class Publication extends Model
{
    use \October\Rain\Database\Traits\Validation;

    /**
     * @var array Правила валидации для Traits\Validation
     */
    public $rules = [
        'authors' => 'required',
        'title' => 'required'
    ];
    /**
     * @var array Массив собственных сообщений об ошибках
     */
    public $customMessages = [
        'authors.required' => 'Необходимо обязательно заполнить поле "Авторы".',
        'title.required' => 'Необходимо обязательно заполнить поле "Название публикации".'
    ];    

P.S. В официальной документаци October CMS в секции "Собственные сообщения при ошибках" на текущий момент указано устаревшее свойство $messages, вместо него необходимо использовать $customMessages потому, что в трейте \October\Rain\Database\Traits\Validation функция выглядит следующим образом.

protected static function makeValidator($data, $rules, $customMessages, $attributeNames, $connection = null)

Похожие записи

FrontEnd контроллеры в OctoberCMS

В OctoberCMS нет концепции frontEnd контроллеров. Иными словами, идеология этой CMS не подразумевает возможность просто создать некий ProductController с несколькими action для обслуживания маршрутов Route::method('product/{id}', 'ProductController@show'). Вместо этого предлагается использовать компоненты плагинов. Именно компоненты являются формой frontEnd контроллеров.