Php 使用kartik文件输入上传Yii2 ajax文件时出错
我正在使用ajax中的kartik yii2扩展名执行文件上传 这是一个法庭系统的实现,在这个系统中,一个案件可以有许多证据,一个人可以上传这些证据 模型 案例代码:Php 使用kartik文件输入上传Yii2 ajax文件时出错,php,ajax,yii2,yii2-advanced-app,Php,Ajax,Yii2,Yii2 Advanced App,我正在使用ajax中的kartik yii2扩展名执行文件上传 这是一个法庭系统的实现,在这个系统中,一个案件可以有许多证据,一个人可以上传这些证据 模型 案例代码: public function rules() { return [ [['ref_no', 'case_description', 'raised_on', 'status', 'raised_by', 'updated_on', 'case_type'], 'required'], [[
public function rules()
{
return [
[['ref_no', 'case_description', 'raised_on', 'status', 'raised_by', 'updated_on', 'case_type'], 'required'],
[['raised_on', 'updated_on'], 'safe'],
[['ref_no', 'status', 'raised_by', 'case_type'], 'string', 'max' => 100],
[['case_description'], 'string', 'max' => 300]
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'ref_no' => 'Ref No',
'case_description' => 'Case Description',
'raised_on' => 'Raised On',
'status' => 'Status',
'raised_by' => 'Raised By',
'updated_on' => 'Updated On',
'case_type' => 'Case Type',
];
}
public function getEvidences()
{
return $this->hasMany(Evidence::className(), ['case_ref' => 'ref_no']);
}
模型代码:
public function rules()
{
return [
[['case_ref', 'saved_by', 'saved_on', 'evidence_type'], 'required'],
[['saved_on'], 'safe'],
[['path'], 'safe'],
[['case_ref', 'saved_by'], 'string', 'max' => 100],
[['evidence_type'], 'string', 'max' => 50],
[['path'], 'file']
];
}
/**
* @inheritdoc
*/
public function attributeLabels()
{
return [
'case_ref' => 'Case Ref',
'saved_by' => 'Saved By',
'saved_on' => 'Saved On',
'id' => 'ID',
'evidence_type' => 'Evidence Type',
'path' => 'Path',
];
}
public function getCaseRef()
{
return $this->hasOne(Cases::className(), ['ref_no' => 'case_ref']);
}
在我的控制器操作中创建(案例控制器)
代码:
由“创建”命令渲染的纵断面视图
代码:
上面总是返回错误no file for upload,表明文件数据没有传递到控制器上您在视图表单中使用模型证据(在$form->field($Evidence,'path')。请尝试使用_print\\r($\u FILES)进行调试。谢谢,我发现您需要在视图的选项中传递name属性,以便覆盖默认属性。(即添加“name”=>“name”
public function actionCreate()
{
$model = new Cases();
$evidence = new Evidence();
if ($model->load(Yii::$app->request->post()) && $model->save()) {
return $this->redirect(['view', 'id' => $model->ref_no]);
}
else {
return $this->render('profile', [
'model' => $model,'evidence'=>$evidence,
]);
}
}
<?php $form = ActiveForm::begin([
'options' => ['enctype'=>'multipart/form-data']
]); ?>
<?php echo $form->field($evidence, 'path')->widget(FileInput::classname(), [
'options' => ['accept' => 'image/*','multiple' => true],
'pluginOptions' => [
'browseIcon' => '<i class="glyphicon glyphicon-camera"></i> ',
'showPreview' => true,
'showCaption' => true,
'showRemove' => true,
'showUpload' => true,
'filename'=>'kagumo',
'browseLabel' => 'Insert Evidence',
'uploadUrl' => Url::to(['cases/upload']),
'maxFileCount' => 10
]
]
);?>
<?php ActiveForm::end(); ?>
public function actionUpload(){
//print_r($_FILES['images']);
if (empty($_FILES['name'])) {
echo json_encode(['error'=>'No files found for pload.']);
// or you can throw an exception
return; // terminate
}else{
echo json_encode(['error'=>'files available for upload']);
}
}