Я новичок в cakePHP, и я сделал одну простую форму после некоторого учебника. В этой html-форме я использовал проверку. Теперь проблема заключается в том, что валидация работает, но сообщение не отображает то, что я хочу отобразить. Я пробую код ниже,
Модель
public $validate = array( 'title' => array( 'title_required' => array( 'rule' => 'notEmpty', 'message' => 'This is required field' ), 'title_unique' => array( 'rule' => 'isUnique', 'message' => 'This should be unique title' ) ) );
контроллер
public function add() { if ($this->request->data) { if ($this->Post->save($this->request->data)) { $this->Session->setFlash('Post has been added successfully'); $this->redirect(array('action' => 'index')); } else { $this->Session->setFlash('Error occured, Please try agan later!'); } } }
Посмотреть
<h2>Add New Post</h2> <?php echo $this->Form->create('Post', array('action'=>'add')); echo $this->Form->input('title'); echo $this->Form->input('body'); echo $this->Form->end('Create Post'); ?>
Ошибка проверки, которую я видел, но не сообщение, которое я упомянул в контроллере
Это встроенная проверка браузера.
Начиная с 2.3, требуемый атрибут HTML5 также будет добавлен к вводу на основе правил проверки.
В вашем title
есть правило notEmpty
, поэтому Cake notEmpty
<input type="text" required="required" ..
и ваш браузер запускает это сообщение.
Изменить: чтобы переопределить это поведение, вы можете:
$this->Form->input('title', array('required'=>false));
или
$this->Form->submit('Submit', array('formnovalidate' => true));
Когда вы отправляете форму, ваша проверка модели будет срабатывать.
Из вашего кода я вижу, что вы не включали помощников.
public $helpers = array('Html', 'Form', 'Session'); public $components = array('Session');
Просто добавьте свои контроллеры и попробуйте.
Параметры Form-create () недопустимы, первым аргументом является имя модели, второе – для параметров:
<h2>Add New Post</h2> <?php echo $this->Form->create('Post', array('action'=>'add')); echo $this->Form->input('title'); echo $this->Form->input('body'); echo $this->Form->end('Create Post'); ?>
Если хелпер формы не знает, какая «модель» создает форму для, я не буду проверять правильность поля в правильном месте, следовательно, он не выведет ошибки проверки для «title»,
[update] решение выше не решило проблему. ОП изменил вопрос
Некоторые идеи:
Обязательно включите «debug» (приложение / Config / core.php set Configure::write('debug', 2);
В противном случае CakePHP может использовать «кэшированную» версию вашей модели.
Если вы неправильно указали свою модель, Cake может автоматически генерировать модель для вас, и в этом случае ваша собственная модель никогда не используется на самом деле, попробуйте это для отладки, чтобы убедиться, что мы даже «добрались» до вашей модели:
Добавьте это в свою модель;
public function beforeValidate($options = array) { debug($this->data); exit(); }