Модель пользователя CakePHP 2.0: Как проверить несколько действий - PullRequest
0 голосов
/ 25 декабря 2011

как проверить больше действий в любом представлении, таких как создание пользователя или редактирование.Хочу иметь больше разных правил в разных действиях.

Я использую свою проверку в моей модели в качестве примера, подобного этому:

<?

    App::uses('AuthComponent', 'Controller/Component');

    class User extends AppModel {

        public $name        = 'User';

        public $primaryKey  = 'id';

        public $validate    = array(

            'username'  => array(  
                'first'=>array(
                    'rule'=>'notEmpty',
                    'message'=>'Your username is empty!',
                    'last'=>true
                ),
                'second'=>array(
                    'rule'=>'isUnique',
                    'message'=>'the username is already taken!'
                )
            ),

            'password'  => array(
                'rule'      => 'notEmpty',
                'message'   => 'Your password is empty!'
            )

        );



        public function beforeSave() {

            if(isset($this->data[$this->alias]['password'])) {
                $this->data['User']['password'] = AuthComponent::password($this->data[$this->alias]['password']);
            }
            return true;
        }

    }

?>

, но у меня есть разные действия, где я хочу использовать проверкуиначе как:

        'username'  => array(  
            'first'=>array(
                'rule'=>'notEmpty',
                'message'=>'Your username is empty!',
                'last'=>true
            ),
            'second'=>array(
                'rule'=>array('minlength',5),
                'message'=>'The Username is to short!'
            )
        ),

        'password'  => array(
            'rule'      => 'notEmpty',
            'message'   => 'Your password is empty!'
        )

    );

в той же модели и для того же контроллера это возможно.

Ответы [ 3 ]

1 голос
/ 08 января 2012

Я нашел еще одно решение, еще раз поискав, и шаг за шагом прочитал документацию.

здесь ссылка на опцию: на

эта справка тоже, потому что вы можете различить update и create с помощью этой опции.

Пример из модели:

public $validate    = array(

        'username'  => array(  
            'first'  =>array(
                'rule'      =>'notEmpty',
                'message'   =>'Sie haben den Produktnamen nicht eingetragen!',
                'last'      =>true,
                'on'        =>'update'
            ),
            'second' =>array(
                'on'        => 'create',
                'rule'      =>'isUnique',
                'message'   =>'Der Username ist bereits vergeben!'
            ),
        ));

Я еще не пробовал, но думаю, что это должно работать

1 голос
/ 02 мая 2013

http://bakery.cakephp.org/articles/dardosordi/2008/07/29/multivalidatablebehavior-using-many-validation-rulesets-per-model

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

В вашей модели:

var $actsAs = array('Multivalidatable'); 

var $validate = array( 
          //your default validation set here
);

var $validationSets = array(
      'firstSet' => array(
                //your first set of validation rules here
                          ),
      'secondSet' => array(
                //your second set of validation rules here
                            ));

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

 $this->Modelname->setValidation('firstSet');
0 голосов
/ 26 декабря 2011

Спасибо за разъяснение вашего вопроса. Теперь, когда я понимаю, что вы спрашиваете, это хороший вопрос.

Я не уверен, что это возможно, и у меня нет времени на тестирование сегодня, но поскольку переменная $validate общедоступна, вы сможете установить ее в контроллере по мере необходимости. Следовательно, вы должны иметь возможность создавать массивы правил на лету или просто назначать предварительно определенные массивы правил, которые вы создали в своей модели.

$validationRulesOne = array(
    //Create the first set of validation rules
);

$validationRulesTwo = array(
    //Create the second set of validation rules
);

Затем в действии вашего контроллера установите набор проверки перед вызовом средства проверки;

//Action 1
$this->User->validate = $validationRulesOne;
$this->User->validate();

//Action 2
$this->User->validate = $validationRulesTwo;
$this->User->validate();
...