Laravel Validation - проверить, имеет ли массив желаемое значение - PullRequest
0 голосов
/ 06 марта 2020

Laravel отправляет массив в имя поля row Это в основном выглядит следующим образом:

    [row] => Array
        (
            [0] => 
            [1] => 
            [2] => 
            [3] => 
            [4] => 
            [5] => b_number
            [6] => u_number
            [7] => 
            [8] => 
            [9] => a_name
            [10] => a_value
            [11] => c_name
            [12] => floor
            [13] => stack
        )

Этот массив может иметь значение с другим индексом, и этот массив может быть как большим, так и маленьким, чем этот. Но главное требование - проверить, либо

b_number,
u_number, 
a_name,
a_value, 
c_name, 
floor, 
stack

эти значения присутствуют в массиве. И если какое-то значение отсутствует, мне нужно вернуть ошибку как.

b_numbber is required c_name is required

В ТЕЧЕНИЕ, ЧТО Я СДЕЛАЛ:

$rules = [
            'row' => [new RequiredCSVColumn()]
        ];

RequiredCSVColumn

    public function passes($attribute, $value)
    {
        $arr = array();
        $required_all = array('b_number', 'u_number', 'a_name' ,'a_value', 'c_name', 'floor', 'stack');

        foreach ($required_all as $k => $v) {
            if(!in_array($v,$value))
            {
                $arr[] = $v;
            }
        }
        if(!empty($arr)){
            return false;
        }
        return true;

    }

Здесь $ arr содержит имя пропущенного поля, все что мне нужно, это вернуть это сообщение как Field Name is required

1 Ответ

2 голосов
/ 06 марта 2020

Вы должны вернуть пользовательское сообщение, подобное этому

class RequiredCSVColumn implements Rule
{
    private $message;

    /**
     * Create a new rule instance.
     *
     * @return void
     */
    public function __construct($message = null)
    {
        $this->message = $message;
    }

    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
         $arr = array();
         $required_all = array('b_number', 'u_number', 'a_name' ,'a_value', 'c_name', 'floor', 'stack');

         foreach ($required_all as $k => $v) {
            if(!in_array($v,$value))
            {
                $arr[] = $v;
                $this->message += $v." is required ";
            }
         }
        if(!empty($arr)){
           return false;
        }
        return true;
    }

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message()
    {
        return $this->message;
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...