CakePHP аннулировать массив элементов - PullRequest
2 голосов
/ 08 октября 2010

Я использую CakePHP.У меня есть форма с массивом элементов.Например: -

<textarea name="data[User][0][description]>
<textarea name="data[User][1][description]>

Из контроллера мне нужно сделать недействительным (вручную) поле массива, если оно пустое и нужно показать ошибки в соответствующем поле.Каков правильный синтаксис для аннулирования поля, если оно является массивом элементов?Я знаю, что следующее будет работать для одного элемента.Как это будет для массива элементов?

$this->User->invalidate("description");

Ответы [ 4 ]

4 голосов
/ 12 декабря 2012

Вы можете ввести в поле зрения:

<?php 
    echo $this->Form->error("User.1.description");
?>
4 голосов
/ 09 октября 2010

К сожалению, вы не можете сделать недействительным поле с этой функцией.

Но что делает invalidate ()?

function invalidate($field, $value = true) {
        if (!is_array($this->validationErrors)) {
            $this->validationErrors = array();
        }
        $this->validationErrors[$field] = $value;
    }

Он просто устанавливает валидацию ошибок модели.

Итак, вы можете выполнять следующие действия в вашем контроллере (но я также призываю вас перенести эту проверку в модель):

$this->User->validationErrors[1]['description'] = 'Your error message';

Следующий код сделает недействительным второе описание в списке.

НТН

0 голосов
/ 04 июня 2014

У меня была похожая проблема, поскольку именно для админ-панели я отображал сообщение об ошибке на первом уровне поля, т.е. только для этой части.

Если вы выполняете проверку на контроллере, просто создайте массив ошибок с именем поля и сообщением об ошибке, установите его в контроллере и отобразите сообщение, если в поле зрения in_array ($ field, $ withErrorArray).

0 голосов
/ 04 июня 2014

Спасибо, Ник,

Ваш ответ помог мне, но на полпути, потому что моя проблема была с составным полем другими подполями.

account_number {
    bank_code, 
    bank_office,
    check_digit,
    account
}

В этом случае, если нам нужно поместить ошибку проверки в одно подполе, это решение:

$this->Model->validationErrors['account_number']['bank_code'][0] = 'Your message error';

Надеюсь, это кому-нибудь поможет.

Привет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...