2016-07-26 1 views
2

После прочтения cakePHP: how set error validation to input field manually in controller мне было интересно, как показать validationError с контроллера, если мы используем форму без модели?CakePHP 2.x: Как вручную установить validationErrors без модели?

Так, например, у нас есть вид checkSomething.ctp, с формой, которую мы можем отправить.

echo $this->Form->create(false); // If we put "SomeModel" here, it would work. 
echo $this->Form->input("myField"); 

И скажем, что мы находимся на /Home/CheckSomething/.

class HomeController extends AppController{ 
    public function CheckSomething(){ 

     // So manually validate a field 
     if(strlen($this->request->data["myField"]) < 5){ 

      // myField is not valid, so we need to show an error near that field 
      $this->SomeModel->invalidateField("myField", "You must enter at least 5 characters"); 

      // How to do this? 

     } 
    } 
} 

Мы не можем использовать модель здесь ... Как установить validationError для поля без модели? Как вручную аннулировать поле, которое поступает из такой формы?

ответ

1

Проще всего было бы отправить сообщение об ошибке в представлении непосредственно:

$errors = []; 
if (strlen($this->request->data["myField"]) < 5) { 
    $errors['myField'] = 'You must enter at least 5 characters'; 
} 
$this->set('errors', $errors); 

А на ваш взгляд:

echo $this->Form->create(false); 
echo $this->Form->input('myField', [ 
    'error' => isset($errors['myField']) ? $errors['myField'] : false 
]); 
+0

То есть именно так, как решить эту проблему. Благодаря! – Koen