ThinkPHP6文件上传与CURD无法使用方法跳转问题
场景说明
有这样一个无法避免的问题,那就是当我们在进行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日