2015-12-02 1 views
0

Commencé juste avec Yii (il ya deux semaines).Yii2 Gii généré créer vue ne fonctionne pas/enregistrer mais mise à jour fait

TL; DR

Création par des vues générées Gii ne fonctionne pas, mais la mise à jour ne, même ils partagent la forme et le contrôleur pas modifié.

Problème:

J'utilise le Yii2 advanced app template.

Ensuite, j'ai généré un modèle à travers le générateur de modèle et le contrôleur/vues à travers le générateur CRUD.

La seule chose que je changé est dévissant les deux champs datetime « created_at » et « created_by » de la forme et ajouté un TimestampBehavior:

public function behaviors() 
{ 
    return [ 
     [ 
      'class' => TimestampBehavior::className(), 
      'attributes' => [ 
       ActiveRecord::EVENT_BEFORE_INSERT => ['created_at', 'updated_at'], 
       ActiveRecord::EVENT_BEFORE_UPDATE => ['updated_at'], 
       ], 
       // if you're using datetime instead of UNIX timestamp: 
       'value' => new Expression('NOW()'), 
     ], 
    ]; 
} 

L'étrange affaire dont je dispose, que la mise à jour fonctionne, mais le créer pas. Il ne montre aucune erreur, il reste juste sur la page ou le rend nouvellement?

Ce code intact du contrôleur:

(Suis-je obtenir ce droit que le "$ model-> save" dans le cas devrait enregistrer la databse?)

CREER :

public function actionCreate() 
{ 
    $model = new Seminar(); 

    if ($model->load(Yii::$app->request->post()) && $model->save()) { 
     return $this->redirect(['view', 'id' => $model->id]); 
    } else { 
     return $this->render('create', [ 
      'model' => $model, 
     ]); 
    } 
} 

MISE À JOUR:

public function actionUpdate($id) 
{ 
    $model = $this->findModel($id); 

    if ($model->load(Yii::$app->request->post()) && $model->save()) { 
     return $this->redirect(['view', 'id' => $model->id]); 
    } else { 
     return $this->render('update', [ 
      'model' => $model, 
     ]); 
    } 
} 

Si d'autres informations sont nécessaires, veuillez commenter. Merci.


MISE À JOUR - dans la section "nécessaire" Solution

Après les deux réponses utiles, j'ai essayé vider l'erreur et il montre

array(1) { ["created_at"]=> array(1) { [0]=> string(32) "Created At darf nicht leer sein." } } 

Comme suggéré je suis parti le "created_at" des règles. Après le nettoyage, créez les travaux. Je pense qu'il ne m'a pas montré l'erreur parce que j'ai supprimé le champ dans le formulaire, puisque l'utilisateur ne doit pas entrer les données directement.

+0

Je n'ai pas bien compris quand vous avez dit ** "Il ne montre aucune erreur, il reste juste sur la page ou le rend" ** ... Vous voulez dire que l'URL change en action créer, les pages se chargent à nouveau le contenu est le même de la mise à jour de l'action? Ou la page ne charge même pas du tout? – Clyff

+0

Est-il possible de nous montrer les points de vue? – Clyff

+0

Les vues sont les vues standard générées par gii. Et oui, pour moi, il semble que la page se charge à nouveau, le contenu du formulaire est pré-rempli avec mes données entrées, peu d'erreur ou quelque chose comme ça. – michaK

Répondre

1

Les contrôleurs que vous avez montrés sont ok.

Il doit y avoir un problème avec le modèle. Vous pouvez vérifier ce que le problème est en éditant le ActionCreate:

public function actionCreate() 
{ 
    $model = new Seminar(); 

    if ($model->load(Yii::$app->request->post()) && $model->save()) { 
     return $this->redirect(['view', 'id' => $model->id]); 
    } else { 
     var_dump($model->getErrors()); 
     /*return $this->render('create', [ 
      'model' => $model, 
     ]);*/ 
    } 
} 

Maintenant, au sujet de vos changements: puisque vous utilisez les noms de colonnes created_at et updated_at vous pouvez simplifier le comportement en définissant:

public function behaviors() 
{ 
    return [ 
     TimestampBehavior::className() 
    ]; 
}; 

Vérifiez également les règles de votre modèle() si les zones created_at ou updated_at sont présentes et supprimez-les.Ils ne sont plus nécessaires.

+0

Merci cela m'a indiqué la bonne direction. Je poste la solution comme mise à jour dans ma question – michaK

+0

J'ai utilisé le code complet dans les comportements car j'ai utilisé un champ datetime et non un entier standard. – michaK

1

Vérifiez les règles de votre modèle et réessayez. Essayez également avec $model->save(false). Il va enregistrer le formulaire sans validation de vérification, donc le problème est que les données ne sont pas validées.

+0

Merci pour la réponse, c'est aussi vrai. – michaK