yii2 - 如何将文件保存在 PHP Yii2 中的动态位置?
问题描述
我想根据公司 id 将文件保存到目录中,例如如果公司的 id 为 11,那么它应该创建一个同名文件夹并在那里保存/上传文件?我在这里有我的控制器逻辑,但我不知道如何将公司模型中的公司 ID 传递给 saveAs() 函数。
场景:我有来自不同模型的公司列表,我想根据公司 ID/名称创建一个目录,保存相应的布局。
public function actionCreate()
{
$company=Company::find()->all();
$model = new Layouts();
// if ($model->load(Yii::$app->request->post()) && $model->save()) {
// return $this->redirect(['view', 'id' => $model->layout_id]);
// }
$model->setScenario('create');
if ($model->load(Yii::$app->request->post())) {
$model->layouts=UploadedFile::getInstance($model,'layouts');
if(!empty($model->layouts)){
$filename=time()."_layouts".".". $model->layouts->extension;
$model->layouts->saveAs('@app/web/uploads/layouts/'.$filename); //here i want it to be @app/web/uploads/layouts/company-id/filename
$model->layouts=$filename;
$model->created_by=Yii::$app->user->id;
$model->updated_by=Yii::$app->user->id;
}else{
var_dump($model->errors);die;
}
if($model->save()){
Yii::$app->session->addFlash('success','Record Created Successfully');
return $this->redirect(['view','id'=>$model->id]);
}else{
Yii::$app->session->addFlash('error','Record Can not be Created ');
}
return $this->render('create', [
'model' => $model,
'company'=>$company
]);
}
}
解决方案
你应该先创建文件夹,
\yii\helpers\FileHelper::createDirectory(\Yii::getAlias('@app/web/uploads/layouts/'.$model->id), 0777);
推荐阅读
- python - 比较numpy数组中的整行和列并删除选定的行和列
- haskell - 如何在 Haskell 中以多态方式为多种类型编写多个函数定义?
- r - 循环 data.frame 列以在 R 中生成虚拟变量
- gdb - 使用 QEMU 和 GDB 调试 xv6:无法解析名称:提供节点名或服务名,或未知
- installshield - 我如何(以编程方式)知道 Installshield 安装程序何时静默运行?
- javascript - 获取请求未在控制台或前端返回任何数据
- c# - 基于相似性对一组字符串进行聚类,同时优化冗余
- azure - HTTP 触发 Azure 函数上的 Singleton scopeId 支持的绑定
- spring - 如何将此多部分文件上传迁移到 Spring Boot 2.4?
- reactjs - 渲染对象数组