2011-12-24 2 views
0

как проверить больше действий в любом представлении, например, для создания пользователя или редактирования. Хотите иметь разные правила в разных действиях.Модель пользователя CakePHP 2.0: как проверить более одного действия

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

<? 

    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!' 
     ) 

    ); 

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

+0

Ваш вопрос не имеет смысла, и нет никаких подробностей. Какой код вы используете в настоящее время и что он не делает, что вы пытаетесь сделать? –

+0

надеюсь, что это поможет лучше понять – webfacer

ответ

0

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

Я не уверен, что это возможно, и у нас нет времени для тестирования сегодня, но поскольку переменная $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(); 
+0

нет, он не работает, он должен работать, но другим способом, но я не знаю, как ... решить эту проблему, переменная не определена в любом месте контроллера, поэтому сначала она выиграла Я работаю, что могу сделать, это проверять каждый раз от контроллера, но я хочу сохранить все в одной области в Модели, что было бы здорово, когда это сработает. Thats информация, которую я получил с сайта cakephp ["controller validate"] (http://book.cakephp.org/2.0/en/models/data-validation/validating-data-from-the-controller.html) ["model validate"] (http://book.cakephp.org/2.0/ru/models/data-validation.html) – webfacer

+0

Задайте массивы валидации в вашей модели. Затем в контроллере измените массив проверки на основе того набора правил, который вы хотите использовать. Если вам нужно динамически создавать правила, тогда создайте в своей модели функцию, которая построит массив правил, а затем применит его к переменной validate. –

1

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

здесь ссылка на вариант: on

эта помощь тоже, потому что вы можете отличить обновление и создать с этой опцией.

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

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!' 
      ), 
     )); 

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

1

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 
          )); 

Затем в контроллере перед действием Save выберите вашего соответствующий набор подтверждающего

$this->Modelname->setValidation('firstSet'); 
Смежные вопросы