ThinkPHP6文件上传与CURD无法使用方法跳转问题

作者: 温新

分类: 【ThinkPHP】

阅读: 2712

时间: 2020-07-31 16:12:47

场景说明

有这样一个无法避免的问题,那就是当我们在进行CURD时成功后跳转的问题。对于这个问题,很遗憾的是ThinkPHP6废弃了success与error这两个跳转方法。

ThinkPHP6完成是参考Laravel而来,或许这就是废弃了success与error方法的原因吧。对于习惯了Laravel的开发者来说可能影响不大,但是对于一直使用ThinkPHP框架的开发者来说,可能需要一会才好缓过来。

对于ThinkPHP6,或许会有一种熟悉的陌生感。用着用着可能会出现这样一个你感觉是BUG但又不是BUG的错误,而ThinkPHP官方并没有对此进行说明。这对新手是不友好。出现了像BUG但又不是BUG的问题,解决方法就只有去看源码,这,你懂的~~~偏了这么多。

对于一个好的东西,想借鉴但又不能全部照搬,该咋办,东拼西凑,最后嘛~~~不吹了,下面回到正轨。

关于CURD成功或失败后带有提示的跳转,有两种解决方法,第一种方法是:重定向并携带session信息;第二种方法是:异步请求,根据返回的自定义的json状态数据进行判断。

add界面

admin/controller/view/test/add.html

<form action="{:url('admin/Test/store')}" enctype="multipart/form-data" method="post">
    <input type="file" name="image" /> <br> 
    <input type="submit" value="上传" /> 
</form>

控制器

步骤一:开启session // app/middleware.php

<?php // 全局中间件定义文件 return [ // 全局请求缓存 // \think\middleware\CheckRequestCache::class, // 多语言加载 // \think\middleware\LoadLangPack::class, // Session初始化 \think\middleware\SessionInit::class // 取消前面的注释 ];

步骤二:编写方法

admin/controller/test/Test.php

public function store(Request $request)
{
    if($request->isPost()){
        $data = $request->param();

         $data['cate_pic'] = '';
        // 判断是否有文件上传
        if(!empty($request->file())){
            $file = $request->file('cate_pic');
            $data['cate_pic'] = \think\facade\Filesystem::disk('public')->putFile( 'topic', $file);
        }

        $result = Db::name('test')->strict(false)->insert($data);
        // 添加成功后,携带session信息,然后在模板中当作提示信息使用
        return redirect(url('admin/Test/index'))->with('success','添加栏目成功');
    }
}

不得不说,这里有一个不小的坑。根据官方的操作走,你会发现永远没有办法进行写入数据操作。它出出现没有文件被上传的错误提示页面。这是BUG吗,会被当成BUG吗,并不清楚。下面记录下我的解决方法。

【解决方法】$request->file()就是解决方法。当没有文件上传时,它会返回一个空数组,我们就可以利用这个空数组来判断是否有文件被上传。

列表页面展示错误信息

admin/controller/view/test/index.html

<h1>{$Request.session.success}</h1>

(完)欢迎大家一起交流学习。

我是夕阳何处寻,期待和优秀的你一起同行!

夕阳何处寻

2020年08月01日

请登录后再评论