2015-02-21 16 views
5

Chcę wykonać operację CRUD przy użyciu narzędzia GII, ale pojawia się komunikat o błędzie Missing required parameters: id, gdy próbuję zapisać mój wpis. KontrolerZłe żądanie (nr 400) - Brak wymaganych parametrów: identyfikator w YII2

postu:

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

    if ($model->load(Yii::$app->request->post())) { 
     $model->post_create_time=date('Y-m-d h:m:s'); 
     $model->save(); 
     return $this->redirect(['view', 'id' => $model->id_post]); 
    } else { 
     return $this->render('create', [ 
      'model' => $model, 
     ]); 
    } 
} 

Dlaczego zawsze uzyskać ten błąd?

+0

Pokaż kod 'actionView()'. – arogachev

+0

@arogachev to 'actionView': ' funkcja publicznego ActionView ($ ID) { powrotu $ to-> render ('Widok' [ model '' => $ to-> findModel ($ ID) , ]); } ' –

Odpowiedz

3

Spróbuj

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

    if ($model->load(Yii::$app->request->post())) { 
     $model->post_create_time=date('Y-m-d h:m:s'); 
     $model->save(false); 

     return $this->redirect(['view', 'id' => $model->id_post]); 
    } else { 
     return $this->render('create', [ 
      'model' => $model, 
     ]); 
    } 
} 

Upewnij się, że robisz $model->save(false) i zobaczyć, czy jeśli to działa.

+0

dziękuję @Abhimanyu, to działa :), ale nie wiem dlaczego. czy możesz wyjaśnić, dlaczego '$ model-> save (false)'. dlaczego powinien "fałszywy"? –

+0

@Shinoda_ Gdy używasz '$ model-> save (false)', pomija ono sprawdzanie poprawności. Jeśli to działa, oznacza to, że "reguły", o których wspomniałeś w swoim "modelu", są niepoprawne. Napraw "reguły" i spróbuj zapisać swój model bez 'false'. Jeśli wszystko jest w porządku, zadziała. –

+0

dziękuję, wiem teraz, gdzie jest mój błąd. –

0

Kilka rzeczy można spróbować tutaj:

  • Sprawdź czy $model->post_id jest null przed użyciem go, coś takiego:

// ... $success=$model->save(); // if it's false, it means there was an error var_dump($success); exit;

  • Sprawdź czy save() został udany przed użyciem:

if($model->save()){ return $this->redirect(['view', 'id' => $model->id_post]); }else{ // show errors var_dump($model->getErrors(); exit; }

Poza tym, radzę ci pisać kod actionView i klasy Post oraz

+0

Sprawdziłem' save() ', a wynikiem jest' tablica (0) {} '. a następnie co dalej? nadal rozumiem, co powinienem zrobić po sprawdzeniu. Jestem nowicjuszem z yii. kod dla 'actionView':' public function actionView ($ id) {return $ this-> render ('widok', ['model' => $ this-> findModel ($ id),]); } ' –

+0

Edytowałem kod: musisz przypisać metodę' save() 'do zmiennej (nazwałem ją' $ success'), a następnie zrzucić tę zmienną, aby sprawdzić, czy zapisy zadziałały, czy nie. –

+0

Próbowałem, a wynikiem jest 'bool (false)' –

0

spróbować

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

    if ($model->load(Yii::$app->request->post())) { 
     $model->post_create_time=date('Y-m-d h:m:s'); 
     if($model->save()) 
      return $this->redirect(['view', 'id' => $model->id_post]); 
     else 
      { 
      return $this->render('create', [ 
      'model' => $mod`enter code here`el, 
      ]); 
     } 
    } else { 
     return $this->render('create', [ 
      'model' => $model, 
     ]); 
    } 
} 
0

To oczywiście dzieje się na $ this-> redirect. Sprawdź reguły url w pliku main.php. Należy się gdzieś tutaj w main.php

'urlManager' => [ 
    'enablePrettyUrl' => true, 
    'showScriptName' => false, 
    'enableStrictParsing' => false, 
    'rules' => [ 
     ... 
    ] 
], 
Powiązane problemy