【发布时间】:2019-12-20 17:30:51
【问题描述】:
我的表单中有一个 Kartik 文件输入,代码如下:
echo $form->field($model, 'images')->widget(FileInput::classname(), [
'options' => ['accept' => 'image/*','multiple' => true]
]);
我想验证输入以便需要上传图片。为此,我的模型中有以下行:
[['images'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg,jpeg']
这是我的模型的代码:
<?php
namespace app\models;
use Yii;
use yii\web\UploadedFile;
/**
* LoginForm is the model behind the login form.
*
* @property User|null $user This property is read-only.
*
*/
class PhonesForm extends \yii\db\ActiveRecord
{
public $images;
public static function tableName()
{
return '{{phones}}';
}
/**
* @return array the validation rules.
*/
public function rules()
{
return [
[['name', 'price','model','description'], 'required'],
[['name','model'],'string', 'min' => 3],
[['description'],'string', 'min' => 25],
['price','integer'],
[['images'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg,jpeg']
];
}
public function upload()
{
if ($this->validate()) {
$this->images->saveAs('uploads/' . $this->images->baseName . '.' . $this->images->extension);
return true;
} else {
return false;
}
}
}
问题是它总是给我一个验证错误,说Please upload a file.。我该如何解决这个问题?谢谢。
更新
我已经更新了我的控制器方法和模型。
控制器方法:
public function actionAdd()
{
if (!Yii::$app->user->getIsGuest() && Yii::$app->user->identity->role == 'admin') {
$model = new PhonesForm();
if ($model->load(Yii::$app->request->post())) {
$model->images = UploadedFile::getInstances($model, 'images');
if ($model->upload()) {
echo "success";
}
else{
return $this->render('dashboardAdd',[
'model' => $model
]);
}
}
else{
return $this->render('dashboardAdd',[
'model' => $model
]);
}
}
else{
return $this->redirect(['site/index']);
}
}
型号:
<?php
namespace app\models;
use Yii;
/**
* LoginForm is the model behind the login form.
*
* @property User|null $user This property is read-only.
*
*/
class PhonesForm extends \yii\db\ActiveRecord
{
public $images;
public static function tableName()
{
return '{{phones}}';
}
/**
* @return array the validation rules.
*/
public function rules()
{
return [
[['name', 'price','model','description'], 'required'],
[['name','model'],'string', 'min' => 3],
[['description'],'string', 'min' => 25],
['price','integer'],
[['images'], 'file', 'skipOnEmpty' => false, 'extensions' => 'png, jpg,jpeg']
];
}
public function upload()
{
if (!$this->validate()) {
return false;
}
foreach ($this->images as $image) {
$image->saveAs('uploads/' . $image->baseName . '.' . $image->extension);
}
return true;
}
}
我还是有同样的问题。
【问题讨论】:
-
请向我们展示处理文件上传的操作代码。
-
看起来像这样:
public function upload() { if ($this->validate()) { $this->images->saveAs('uploads/' . $this->images->baseName . '.' . $this->imageFile->extension); return true; } else { return false; } }但是验证永远不会通过,所以它不起作用。 -
什么是
$this->imageFile->extension它来自哪里不应该是$this->images->extension? -
有人找到解决办法了吗?
标签: php validation file-upload yii2