我正在尝试创建带有文本输入的表单,并使用angular6的angular6和yii2 in an yii2为服务器端创建一个表单。
角服务:
create(name: string, image: any): Observable<any> {
let url = this.baseUrl + 'create';
let form: FormData = new FormData();
form.append('image', image);
form.append('name', name);
return this.http.post<Notification>(url, form);
}
yii控制器:
public function beforeAction($action)
{
$this->enableCsrfValidation = false;
return parent::beforeAction($action);
}
public function actionCreate()
{
$model = new MapCreationFormModel();
if ($model->load(Yii::$app->request->post()))
{
$model->image = UploadedFile::getInstance($model, 'image');
$response = MapRepository::create($model->name, $model->image);
return json_encode($response);
}
else
{
// >>> This exception is thrown.
throw new Exception("Cannot bind model");
}
}
yii模型:
class MapCreationFormModel extends Model
{
public $name;
public $image;
}
使用提琴手,我可以看到我的请求:
------- webkitformboundaryiv0dyba9zkwrhxlu content-disposition:form-data;名称="图像";filename =" test.bmp" content-type:image/bmp
bm [[[特殊字符]]
------- webkitformboundaryiv0dyba9zkwrhxlu content-disposition:form-data;名称="名称"
aa
------- webkitformboundaryiv0dyba9zkwrhxlu-
不幸,异常'异常("不能绑定模型"(从我的控制器抛出(请参阅控制器代码(。
您是否知道为什么我的模型不能被束缚?
我终于找到了这篇文章的问题:yii2 post图像在没有yii2命名约定的API中进行模型。
我必须使用方法UploadedFile::getInstanceByName
。
这是我为有兴趣的人提供的代码:
public function actionCreate()
{
$name = Yii::$app->request->post('name');
$fileData = UploadedFile::getInstanceByName('image');
$fileName = time() . '.' . $fileData->extension;
$filePath = '../uploads/' . $fileName;
$fileData->saveAs($filePath);
$image = fopen($filePath,"rb");
// Do your stuff.
}