CakePHP 2.x несколько моделей (в комплекте поставляется отдельно) проверку
Как писать более сложные приложения я столкнулся с некоторыми проблемами. У меня есть 2 модели на одной странице. Пользователь и пользователь (это необязательно). Я должен использовать правила проверки модели (встроенные и костюмы: matchpassword). С человеком это не вызов, но с пользователем я не знаю, как это сделать. Потому что, если я реализую правила проверки в первом inload, у меня больше не будет дополнительного пользователя. Проверка Jquery не достаточно безопасна, я нуждаюсь в стороне сервера.
Groupscontroller:
public function add() {
if ($this->request->is('post')) {
$this->Group->create();
if (
$this->Group->save($this->request->data)
) {
$this->Session->setFlash(__('The group has been saved.'));
$group_id=$this->Group->getInsertId();
$person=$this->request->data['Person'];
$person['group_id']=$group_id;
$this->Group->Person->create();
$this->Group->Person->save($person);
return $this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash(__('The group could not be saved. Please, try again.'));
}
}
файл представление Поскольку пользователь является необязательным я генерировать поля ввода от JQuery:
<div class="groups form">
<?php echo $this->Form->create('Group', array('class' => 'jquery-validation'));
echo $this->Html->script('http://code.jquery.com/jquery-1.11.3.min.js');
?>
<fieldset>
<legend><?php echo __('Add Group'); ?></legend>
<?php
echo $this->Form->input('name');
echo $this->Form->input('comments');
?>
</fieldset>
<h2>People</h2>
<table id="mytable">
<tr><th></th><th>Last Name</th><th>First Name</th><th>Email</th><th>Gender</th></tr>
<tr id="person0" style="display:none;">
<td><?php echo $this->Form->button(' - ',array('type'=>'button','title'=>'Click Here to remove this person')); ?></td>
<td><?php echo $this->Form->input('unused.lastName',array('label'=>'','type'=>'text')); ?></td>
<td><?php echo $this->Form->input('unused.firstName',array('label'=>'','type'=>'text')); ?></td>
<td><?php echo $this->Form->input('unused.email',array('label'=>'','type'=>'text')); ?></td>
<td><?php echo $this->Form->input('unused.gender',array('label'=>'','type'=>'select','options'=>array('M'=>'M','F'=>'F','T'=>'T'))); ?></td>
</tr>
<tr id="trAdd"><td> <?php echo $this->Form->button('+',array('type'=>'button','title'=>'Click Here to add another person','onclick'=>'addPerson()')); ?> </td><td></td><td></td><td></td><td></td></tr>
</table>
<div id="user-options">
<?php
if (isset($this->data['User'])) {
echo $form->hidden("User.0.id");
echo $form->input("User.0.username", array('label' => "Option " . (0)));
echo $form->input("User.0.password", array('label' => "Option " . (0)));
echo $form->input("User.$i.password_confirm", array('label' => "Option " . (0)));
}
?>
</div>
, если я не хотел бы использовать: $this->Form->input('unused.firstName'
и используя $this->Form->input('User.firstName'
Типового правила проверки будут работать, но в этом случае я не могу добавить только человека из-за необходимых полей пользователя
Человек Modell:
class Person extends AppModel {
/**
* Use database config
*
* @var string
*/
public $useDbConfig = 'test';
/**
* Display field
*
* @var string
*/
public $displayField = 'firstName';
public $validate = array(
'firstName' => array(
'rule'=>'alphaNumeric',
'required' => true,
'message'=>'Not empty'),
'password' => array(
'notEmpty' => array(
'rule' => array('notEmpty'),
'message' => 'Enter your Password',
//'allowEmpty' => false,
//'required' => false,
//'last' => false, // Stop validation after this rule
//'on' => 'create', // Limit validation to 'create' or 'update' operations
),
'Match passwords'=>array(
'rule'=>'matchPasswords',
'message'=>'passwords are not equal'
)
),
'password_confirm' => array(
'notEmpty' => array(
'rule' => array('notEmpty'),
'message' => 'Confirm your password',
'update' operations
),
);][1]
пользователя Модель:
'username' => array(
'notEmpty' => array(
'rule' => array('notEmpty'),
),
),
'password' => array(
'notEmpty' => array(
'rule' => array('notEmpty'),
'message' => 'Enter your Password',
),
'Match passwords'=>array(
'rule'=>'matchPasswords',
'message'=>'passwords are not equal'
)
),
'password_confirm' => array(
'notEmpty' => array(
),
Update1: Я думаю о bit.Maybe я должен написать правила валидации костюм: , где я могу утверждать, что if (поля Model1 и поля Model2 не пустые) ИЛИ поля Model1 не пустые, а поля Model2 пустые) return true
это не происходит, потому что вы не даете правильный имя атрибута в поле. 'User.0.id' должно быть' User.id', 'User.0.username' должно быть' User.username', 'User.0.password' должно быть' User.password' и 'User. $ I .password_confirm' должно быть 'User.password_confirm' –
вы правы с User.0.id означает User [0] [id], а остальное, но это не причина, по которой проверка модели (появляется *) – Andrewboy