讨论数量:
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Http\Requests\TopicRequest;
use App\Models\Topic;
use App\Models\Category;
use Auth;
use App\Handlers\ImageUploadHandler;
class TopicsController extends Controller
{
public function __construct()
{
$this->middleware('auth', ['except' => ['index', 'show']]);
}
public function index()
{
//防止N+1的情况发生,所以我们采用预加载的方式处理
$topics = Topic::with('user', 'category')->paginate(10);
return view('topics.index', compact('topics'));
}
public function show(Topic $topic)
{
return view('topics.show', compact('topic'));
}
public function create(Topic $topic)
{
$categories = category::all();
return view('topics.create_and_edit', compact('topic','categories'));
}
public function store(TopicRequest $request,Topic $topic)
{
$topic->fill($request->all());
$topic->user_id = Auth::id();
$topic->save();
return redirect()->route('topics.show', $topic->id)->with('success', '成功创建话题');
}
public function uploadImage(Request $request, ImageUploadHandler $uploader)
{
// 初始化返回数据,默认是失败的
$data = [
'success' => false,
'msg' => '上传失败!',
'file_path' => ''
];
// 判断是否有上传文件,并赋值给 $file
if ($file = $request->upload_file) {
// 保存图片到本地
$result = $uploader->save($request->upload_file, 'topics', \Auth::id(), 1024);
// 图片保存成功的话
if ($result) {
$data['file_path'] = $result['path'];
$data['msg'] = "上传成功!";
$data['success'] = true;
}
}
return $data;
}
}
Route::post('upload_image', 'TopicsController@uploadImage')->name('topics.upload_image');
路由写错了吧
这节有两处错误,改了就正常了
- 路由 Route::post ('upload_image', 'TopicsController@uploadImage')->name ('topics.upload_image'); 改为 Route::post ('upload_image', 'TopicsController@upload_image')->name ('topics.upload_image');
- 前端的 create_and_edit.blade.php
url 中的引号有问题
<script> $(document).ready(function(){ var editor = new Simditor({ textarea: $('#editor'), upload:{ url: "{{ route('topics.upload_image') }}",//两个单引号要出问题吧? // 处理上传图片的 URL // params —— 表单提交的参数,Laravel 的 POST 请求必须带防止 CSRF 跨站请求伪造的 _token 参数; params:{ _token: '{{ csrf_token() }}' }, filekey: 'upload_file', // fileKey —— 是服务器端获取图片的键值,我们设置为 upload_file; connectionCount: 3, // connectionCount —— 最多只能同时上传 3 张图片; leaveConfirm: '文件上传中, 关闭此页面将取消上传' // leaveConfirm —— 上传过程中,用户关闭页面时的提醒。 }, pasteImage: true, //设定是否支持图片黏贴上传,这里我们使用 true 进行开启; }) }); </script>
推荐文章: