2013-01-25 6 views
3

J'ai besoin de stocker un enregistrement dans le premier modèle. Il a environ 10 champs. Maintenant, je dois appliquer la règle requise pour un champ que je stocke dans le modèle SECOND et je reçois ces valeurs pour ce champ du troisième modèle. (C'est un champ déroulant)champ obligatoire pour le champ de l'autre modèle dans yii

comment puis-je faire cela domaine obligatoire en yii ??

que peut aider s'il vous plaît ..

Merci beaucoup,

+0

si vous avez une règle requise dans le 2ème modèle, et que vous passez une instance de 2ème modèle à la forme, alors cela devrait fonctionner –

+0

donc je n'ai pas besoin d'avoir la règle requise dans le premier modèle actuel? – Developer

+0

voir http://stackoverflow.com/questions/10405649/yii-dynamically-change-rules-from-controller –

Répondre

0

Vous pouvez ajouter des attributs supplémentaires et des règles à un modèle. Vous n'avez pas besoin d'utiliser uniquement des attributs directement liés aux champs de votre table de base de données. Regardons un exemple basique. Vous disposez d'un utilisateur (User) tableau qui présente les champs suivants:

  • id
  • email
  • mot de passe

Et vous avez une autre table qui stocke les informations profil de l'utilisateur (UserProfile) qui a la structure:

  • id
  • user_id
  • pays

Lorsque l'utilisateur crée son compte, vous auriez une forme qui capture leurs informations. Votre modèle utilisateur aurait des règles comme:

array('email, password', 'required'), 
array('email', 'unique', 'message'=>'Email already in use'), 
... 

Vous pouvez ajouter un attribut pour pays à votre modèle utilisateur comme ceci:

class User extends CActiveRecord { 
    public $country; 
    ... 

Et puis dans vos règles, vous pouvez ajouter le nouvel attribut:

array('email, password, country', 'required'), 
array('email', 'unique', 'message'=>'Email already in use'), 
... 

L'attribut country fera maintenant partie de votre modèle User. Vous pouvez maintenant ajouter à votre formulaire:

<?php echo $form->dropDownList($model,'country',CHtml::listData(Country::model()->findAll(),'id','country_name'),array('empty'=>'-- select a country --')); ?> 

maintenant sur votre formulaire soumettre, la méthode $model->validate() validera le champ du pays. Vous pouvez l'enregistrer manuellement sur votre deuxième modèle (UserProfile), quelque chose comme:

if(isset($_POST['User'])){ 
    if ($model->validate()){ 
     $user_profile = new UserProfile; 
     $user_profile->user_id = $model->id; 
     $user_profile->country = $model->country; 
     $user_profile->save(); 
     ... 

J'espère que cela répond à votre question.

+0

merci eskimo..je vais l'essayer – Developer

+0

Pas de problème, laissez-moi savoir si vous êtes coincé –

Questions connexes