2016-09-23 12:50:19 2370次浏览 4条回答 0 悬赏 50 金钱

图片可以成功保存,但是就是图片名保存不到数据库,字段长度没问题。控制器中我也挨个打印了,都没问题,就是保存不进去。琢磨了好几天了,求大神告知。程序没有报错,单个字段是空的

补充于 2016-09-23 13:38

rule规则

    {
        return [
            [['type', 'published_at'], 'string'],
            [['name'], 'string', 'max' => 255],
            [['url'], 'string', 'max' => 100],
            [['url'], 'file', 'extensions' => ['png', 'jpg', 'gif']]
        ];
    }
补充于 2016-09-23 13:39

controller

public function actionCreate()
    {
        $model = new Ad();

        if ($model->load(Yii::$app->request->post())) {
            $model->url = UploadedFile::getInstance($model, 'url');
            if (!empty($model->upload())) {
                $model->url = $model->upload();
            }
            $model->published_at = strval(strtotime($model->published_at));
            $model->save();
            return $this->redirect(['index']);
        } else {
            return $this->render('create', [
                'model' => $model,
            ]);
        }
    }
补充于 2016-09-23 13:40

model中定义了一个存储路径与图片名转化随机码

public function upload()
    {
        $filename = Yii::$app->getSecurity()->generateRandomString() . '.' . $this->url->extension;
        $savePath = \Yii::getAlias('@uploadsPath/' . '/ad/') . DIRECTORY_SEPARATOR;
        FileHelper::createDirectory($savePath);
        $this->url->saveAs($savePath . $filename);
        return $filename;

    }
补充于 2016-09-23 13:40

其中url字段就是fileInput框。

  • 回答于 2016-09-23 13:15 举报

    你贴一下你的代码让大家看看啊

  • 回答于 2016-09-23 14:12 举报

    你可以在保存的时候做个判断以获取保存不成功的信息。代码看起来是这样子的。

    if ($model->save()) {
        该干啥干啥
    } else {
    	print_r($model->errors); //获取错误信息。
    }  
    

    然而我猜测错误的原因是因为你rules中声明了url是个文件。然而其理论上且实际上应该是个字符串。如果你没有办法让一个规则对应两种类型(文件和字符串)。那么你应该为文件上传单独声明一个模型。虽然这么做在视图界面需要依靠两个模型去渲染表单。但这是可以的,并且这是最好的做法。

    2 条回复
    回复于 2016-09-23 14:23 回复

    我试了一下,将rule file哪条给关了,然后if加了一条获取报错信息时,程序并没有报错。直接存到数据表了,但是url字段还是空的。并没有存储到上传图片的文件名

    回复于 2016-09-23 14:24 回复

    我分段打印得到的$model->url = xxxxxxxxxxxxxxx.jpg (字符长度=》36 chars)。 数据库的字段长度为100 chars。存不进去是什么鬼

  • 回答于 2016-09-23 16:24 举报

    我猜测你是在Ad类中有个public $url;将其改成public $file,同样的 $model->file = UploadedFile::getInstance($model, 'file');后面相关的也要改

    1 条回复
    回复于 2016-09-27 12:46 回复

    如果说不依靠插件的话图片的上传必须要在模型中定义一个变量吗?我感觉好奇怪啊这样

    觉得很赞
  • 回答于 2016-09-23 17:26 举报

    [['url'], 'string', 'max' => 100], 这条规则是干嘛的

您需要登录后才可以回答。登录 | 立即注册
飒雅
助理

飒雅 北京

注册时间:2016-06-12
最后登录:2019-02-25
在线时长:11小时38分
  • 粉丝6
  • 金钱5
  • 威望0
  • 积分115

热门问题