2016-08-18 8 views
0

私はyii2-widget-fileinputをフォームにアップロードしています。 アップロードボタンまたは作成ボタンをクリックすると、コントローラにTrying to get property of non-objectエラーが発生します。Yii2で画像をアップロードするためにkartik-vを使用しているときに非オブジェクトのプロパティを取得しようとしています

コントローラ

public function actionCreate() 
    { 
     Yii::$app->params['uploadPath'] = Yii::$app->basePath . '/uploads/'; 
     $model = new Ads(); 
     $provinces = ArrayHelper::map(Province::find()->all(), 'name', 'name'); 
     if ($model->load(Yii::$app->request->post())){ 

      $image = UploadedFile::getInstances($model, 'image'); 
      $model->filename = $image->name; 
      $ext = end((explode(".", $image->name))); 
      $avatar = Yii::$app->security->generateRandomString().".{$ext}"; 
      $path = Yii::$app->params['uploadPath'].$avatar; 
      if ($model->save()) { 

       $image->saveAs($path); 
       $model->image_adr = $path; 
       return $this->redirect(['view', 'id' => $model->id]); 
      }else{ 
       echo "error on saving the model"; 
      } 

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

モデルルール

public function rules() 
    { 
     return [ 
      [['type', 'explanation', 'cost', 'province_name', 'address'], 'required'], 
      [['type', 'explanation', 'image_adr', 'address'], 'string'], 
      [['cost'], 'integer'], 
      [['province_name'], 'string', 'max' => 20], 
      [['province_name'], 'exist', 'skipOnError' => true, 'targetClass' => Province::className(), 'targetAttribute' => ['province_name' => 'name']], 
      [['image'],'safe'], 
      [['image'], 'file', 'extensions'=>'jpg, gif, png', 'maxFiles'=>3,], 
     ]; 

とfinnally

<?= $form->field($model, 'image[]')->widget(FileInput::classname(), [ 
    'options'=>['accept'=>'image/*', 'multiple'=>true], 
    'pluginOptions'=>['allowedFileExtensions'=>['jpg','gif','png'], 'overwriteInitial'=>false,] 
      ]); ?> 

問題画像はポストにかそうでない私は、エラーの画像は参考になりまし

property of non-object error

答えて

0

は、問題は、あなたがUploadedFile::getInstances($model, 'image');を使用しているときにforeachで仕事をしたり、配列のように扱うべきです。

私の問題製の何かが、あなたがUploadedFile::getInstancを使用している場合でも、あなたはまだ、配列のように扱う必要があり(廃止され、最後にsのに気づく)と、すべての部分であなたが孤独$image[0]、ない$iamgeを使用する必要がありますということでした。

1

かもしれません

$image = UploadedFile::getInstances($model, 'image'); 

あなたが最初にチェックすべきだと思うコントローラでこの部分を参照する必要があります。

.... 

$image = UploadedFile::getInstances($model, 'image'); //getInstanceByName 

if (!empty($image)) 
    $model->filename = $image->name; 

    ..... 
    if ($model->save()) { 
     if (!empty($image)) 
       $image->saveAs($path); 
......... 

フォームのencyタイプに確認してください追加されます。

$form = ActiveForm::begin([ 
'id' => 'form_id', 
'options' => [ 
'class' => 'form_class', 
'enctype' => 'multipart/form-data', 
], 
]); 
+0

エラーが示すように、 '$ image = UploadedFile :: getInstances($ model、 'image');'はあなたが望むものを返さず、画像がポストにはありません。私は何をすべきか? – Amir

+0

あなたのフォームにencytype multipartデータが追加されていますか? –

+0

実際には...どこに追加すればいいですか? – Amir

関連する問題