Плагин OctoberCMS показывает все проверки сразу

я использую строитель плагин для создания плагинов и проверки полей в моей модели в одном из моих плагинов, который работает нормально.

Допустим, у меня есть что-то вроде проверки в одном из моих плагинов, называем это команда.

Файл модели: technobrave \ команда \ модели \ Team.php

<?php namespace Technobrave\Team\Models;

use Model;

/**
* Model
*/
class Team extends Model
{
use \October\Rain\Database\Traits\Validation;

/*
* Validation
*/
public $rules = [
'name' => 'required|unique:technobrave_team_',
'photo' => 'required',
'description'=>'max:1000',
'position' => 'required',
'phone' => 'required',
'mobile' => 'required',
'email' => 'required|email|unique:technobrave_team_',
'website' => 'url',];public $customMessages = [
'name.required' => 'Please enter team member name',
'name.unique' => 'This team member name already exists',
'photo.required' => 'Please select team member photo',
'description.max' => 'Please enter maximum 1000 characters for description',
'position.required' => 'Please enter team member position',
'phone.required' => 'Please enter team member phone number',
'mobile.required' => 'Please enter team member mobile number',
'email.required' => 'Please enter team member email address',
'email.email' => 'Please enter valid team member email address',
'email.unique' => 'This email address already exists',
'website.url' => 'Please enter valid team member url',];

}

Это работает абсолютно нормально, я могу видеть проверки, но они идут один за другим. Вместо этого я хочу, чтобы они появились сразу. Для всех полей.

Это возможно ? Как я могу сделать это?

Спасибо

1

Решение

Вы можете сделать что-то вроде этого.

1.- Отключить сгенерированные проверки

public $throwOnValidation = false;

2. Прослушивание перед методом валидации, но для этого мы реализуем статический флаг, который будет защищен только для метода, и будет вызываться один раз, а не рекурсивным циклом.

public function beforeValidate()
{
static $called = false;
if (!$called) {
$called = true;
if (!$this->validate()) {
throw  new \October\Rain\Exception\ValidationException([
'Errors' => collect($this->validationErrors)->reduce(function (
$msg,
$error
) {
return $msg . $error[0] . ' ';
})
]);
}
}
}

3.- Разобрать ошибки валидации и объединить в строку

4.- По умолчанию октябрьское флэш-сообщение экранирует любую строку HTML, чтобы избежать XSS, но если вы действительно хотите это сделать, вы можете переопределить e() вспомогательная функция Laravel

4.1.- Создайте файл в каталоге плагинов под названием helpers.php и переопределите функцию e ()

<?php

function e($str)
{
return $str;
}

4.2.- Добавьте в файл bootstrap.php свой файл непосредственно перед объявлением $ helpersPath, примерно так:

$customHelpers = __DIR__ . '/../plugins/vendor/yourplugin/helpers.php';
if (file_exists($customHelpers)) {
require $customHelpers;
}

Теперь вы можете добавить
в функции уменьшения, как это

return $msg . $error[0] . '<br>';
2

Другие решения

Хорошо, ребята, вот как я решил эту проблему.

Просто перейдите к плагину, над которым вы хотите работать, и откройте его plugin.php файл и добавьте следующие строки кода.

plugin.php

public function boot()
{
Event::listen('backend.page.beforeDisplay', function($controller, $action, $params) {
/* Here you can put your css file wherever you want  .. I put in my current theme's directory */
$controller->addCss('/themes/your_current_theme_folder_name/assets/css/general.css');
});
}

Готово забыть добавить use Event; прежде чем добавить свой class код в этом файле.

открыто general.css файл и положить ниже код.

.flash-message.fade.in {
white-space: pre;
}

Затем откройте файл модели плагина и введите код ниже.

Team.php (Файл модели)

public $throwOnValidation = false;public function beforeValidate()
{
static $called = false;
if (!$called)
{
$called = true;
if (!$this->validate())
{

throw new \October\Rain\Exception\ValidationException([
'Errors' => collect($this->validationErrors)->reduce(function (
$msg,
$error
) {
return $msg . $error[0] . "\r\n";
})
]);
}
}
}

Надеюсь это поможет.

0

По вопросам рекламы [email protected]