2014-10-17 67 views
1

我试图通过创建一个简单的表单来添加新的postslearn yii 2.0调用未知的方法:yii db ActiveQuery :: formName()

下面是相应的方法我SiteController(也开始加入use app\models\Posts; at the top):

public function actionSave($id=NULL){ 
    if($id = NULL) 
     $model = new Posts; 
    else 
     $model = $this->loadModel($id); 

    if(isset($_POST['Posts'])){ 
     $model->load($_POST); 
     if($model->save()){ 
      Yii::$app->session->setFlash('success', 'Model has been saved'); 
      $this->redirect($this->createUrl('site/save', ['id' => $model->id])); 
     }else 
      Yii::$app->session->setFlash('error', 'Model could not be saved'); 
    } 
    echo $this->render('save', ['model' => $model]); 
} 

它使得save视图文件。下面是视图文件:

<?php 
    use yii\helpers\Html; 
    use yii\widgets\ActiveForm; 
?> 

<?php $form = ActiveForm::begin(['options' => ['class' => 'form-horizontal', 'role' => 'form']]) ?> 

<div class="form-group"> 
    <?php echo $form->field($model, 'title')->textInput(['class' => 'form-control']); ?> 
</div> 

<div class="form-group"> 
    <?php echo $form->field($model, 'data')->textArea(['class' => 'form-control']); ?> 
</div> 

<?php echo Html::submitButton('Submit', ['class' => 'btn btn-primary pull-right']); ?> 

<?php ActiveForm::end(); 

我期待一种形式,但它显示错误Calling unknown method: yii\db\ActiveQuery::formName()

我到底做错了什么?

+0

$ form = ActiveForm :: begin();尝试没有任何价值的开始功能 – 2014-10-17 12:24:12

+0

当您在添加或编辑时出错? – 2014-10-17 12:27:55

+0

仍然不起作用。它工作,如果我从视图 – Kanav 2014-10-17 12:30:36

回答

1
public function actionSave($id=NULL){ 
    if($id == NULL) 
     $model = new Posts; 
    else 
     $model = $this->loadModel($id); 

    if(isset($_POST['Posts'])){ 
     $model->load($_POST); 
     if($model->save()){ 
      Yii::$app->session->setFlash('success', 'Model has been saved'); 

      //Updated 
      $this->redirect(['save', 'id' =>$model->id]); 

      //Remove this 
      //$this->redirect($this->createUrl('site/save', ['id' => $model->id])); 

     }else 
      Yii::$app->session->setFlash('error', 'Model could not be saved'); 
    } 
    echo $this->render('save', ['model' => $model]); 
} 
0

我想你使用loadModel功能,如果是的话,改变这一行

$model = Posts::find($id); 

这个

$model = Posts::find()->where(['id' => $id])->one(); 

错误发生,因为通过loadModel返回的对象是一个ActiveQuery和ActiveForm期望一个ActiveRecord。

0
Calling unknown method: frontend\models\SignupForm::save() 

SiteController.php 


public function actionSignup() 
    { 
     $model = new SignupForm(); 

     if ($model->load(Yii::$app->request->post()) && $model->save()) { 
      $fileName = $model->username; 
      $model->file =UploadedFile::getInstance($model,'file'); 
      $model->file->saveAs('uploads/'.$fileName.'.'.$model->file->extension); 
      $model->filePath = 'uploads/'.$fileName.'.'.$model->file->extension ; 
      $model->save(); 
      return $this->redirect(['view', 'id' => $model->idQuiz]); 
     //} 


     // if ($model->load(Yii::$app->request->post())) { 
      if ($user = $model->signup()) { 
       if (Yii::$app->getUser()->login($user)) { 
        return $this->goHome(); 
       } 
      } 
     } 

     return $this->render('signup', [ 
      'model' => $model, 
     ]); 
    } 


signup.php 


       <?= $form->field($model, 'file')-> fileinput(); ?> 


SignupForm.php 

<?php 
namespace frontend\models; 

use common\models\User; 
use yii\base\Model; 
use Yii; 

/** 
* Signup form 
*/ 
class SignupForm extends Model 
{ 
    public $username; 
    public $email; 
    public $password; 
    public $first_name; 
    public $last_name; 
    public $address; 
    public $state_id; 
    public $city_id; 
    public $file; 
    public $filePath; 

    /** 
    * @inheritdoc 
    */ 
    public function rules() 
    { 
     return [ 
      ['username', 'filter', 'filter' => 'trim'], 
      ['username', 'required'], 
      ['first_name', 'required'], 
      ['last_name', 'required'], 
      ['address', 'required'], 
      ['state_id', 'required'], 
      ['city_id', 'required'], 
      ['filePath', 'required'], 
      ['username', 'unique', 'targetClass' => '\common\models\User', 'message' => 'This username has already been taken.'], 
      ['username', 'string', 'min' => 2, 'max' => 255], 

      ['email', 'filter', 'filter' => 'trim'], 
      ['email', 'required'], 
      ['email', 'email'], 
      ['email', 'string', 'max' => 255], 
      ['email', 'unique', 'targetClass' => '\common\models\User', 'message' => 'This email address has already been taken.'], 

      ['password', 'required'], 
      ['password', 'string', 'min' => 6], 
     ]; 
    } 

    /** 
    * Signs user up. 
    * 
    * @return User|null the saved model or null if saving fails 
    */ 
    public function signup() 
    { 
     if (!$this->validate()) { 
      return null; 
     } 

     $user = new User(); 
     $user->first_name = $this->first_name; 
     $user->last_name = $this->last_name; 
     $user->address = $this->address; 
     $user->state_id = $this->state_id; 
     $user->city_id = $this->city_id; 
     $user->filePath = $this->filePath; 
     $user->username = $this->username; 
     $user->email = $this->email; 
     $user->setPassword($this->password); 
     $user->generateAuthKey(); 

     return $user->save() ? $user : null; 
    } 
} 
+0

请详细说明 – Pooya 2016-03-21 10:51:39

相关问题