1.view部分:

安装一个扩展包:Laravel-UEditor

  1 composer require "overtrue/laravel-ueditor:~1.0"

配置

添加下面一行到 config/app.php 中 providers 部分:

  1 Overtrue\LaravelUEditor\UEditorServiceProvider::class,

发布配置文件与资源

  1 php artisan vendor:publish --provider=”Overtrue\LaravelUEditor\UEditorServiceProvider”

模板引入编辑器

这行的作用是引入编辑器需要的 css,js 等文件,所以你不需要再手动去引入它们。

  1 @include('vendor.ueditor.assets')

编辑器的初始化

  1 <!-- 实例化编辑器 -->
2 <script type="text/javascript">
3 var ue = UE.getEditor('container');
4 ue.ready(function() {
5 ue.execCommand('serverparam', '_token', '{{ csrf_token() }}'); // 设置 CSRF token.
6 });
7 </script>
8
9 <!-- 编辑器容器 -->
10 <script id="container" name="content" type="text/plain"></script>
11

5.4+ 请不要忘记 php artisan storage:link

如果你使用的是 laravel 5.3 以下版本,请先创建软链接:

# 请在项目根目录执行以下命令

$ ln -s `pwd`/storage/app/public `pwd`/public/storage

在 config/ueditor.php 配置 disk 为 'public' 情况下,上传路径在:public/uploads/ 下,确认该目录存在并可写。

如果要修改上传路径,请在 config/ueditor.php 里各种类型的上传路径,但是都在 public 下。

请在 .env 中正确配置 APP_URL 为你的当前域名,否则可能上传成功了,但是无法正确显示。

更多请参考 Laravel-UEditor

在views文件夹下新建一个questions文件夹,并在该子文件夹内新建一个create.blade.php文件,代码如下:

  1 @extends('layouts.app')
2 @section('content')
3 @include('vendor.ueditor.assets')
4 <div class="container">
5 <div class="row">
6 <div class="col-md-8 col-md-offset-2">
7 <div class="panel panel-default">
8 <div class="panel-heading">
9 发布问题
10 </div>
11 <!-- 编辑器容器 -->
12 <script id="container" name="content" type="text/plain"></script>
13 </div>
14 </div>
15 </div>
16 </div>
17
18 <!-- 实例化编辑器 -->
19 <script type="text/javascript">
20 var ue = UE.getEditor('container');
21 ue.ready(function () {
22 ue.execCommand('serverparam', '_token', '{{ csrf_token() }}'); // 设置 CSRF token.
23 });
24 </script>
25
26 @endsection
27

注意可以在上一节 Laravel Vuejs 实战:开发知乎 (5)设计问题表 中提到的命令改成使用

  1   1 php artisan make:model Models/Question -cmr

这样直接就采用了RESTFul式的Controller,比较方便;web.php中也可以直接:

  1 Route::resource(‘questions’,’QuestionController’);

如果已经执行过了,可以删除QuestionController然后执行:

  1 php artisan make:controller QuestionController –r
2
3 或
4
5 php artisan make:controller QuestionController –resource

在web.php 文件中添加一个:

  1 Route::resource('questions', 'QuestionController'); 

当访问 http://zhihu.test/questions/create 链接的时候会 由QuestionController中的create方法来接待,我们需要返回一个view【视图界面】,所以修改添加如下代码:

  1   /**
2 * Show the form for creating a new resource.
3 *
4 * @return \Illuminate\Http\Response
5 */
6 public function create()
7 {
8 //返回questions文件夹下create.blade.php作为视图
9 return view('questions.create');
10 }
11

结果如下:

正确显示视图,但是我们是需要发布问题,这里只是看到了编辑器,所以我们修改create.blade.php视图代码如下:

注:如果忘记了或者不太清楚questions提交保存的route路由别名,可以用命令行: php artisan route:list ,会列出所有的route路由信息,如图:

  1 @extends('layouts.app')
2 @section('content')
3 @include('vendor.ueditor.assets')
4 <div class="container">
5 <div class="row">
6 <div class="col-md-8 col-md-offset-2">
7 <div class="card">
8 <div class="card-header">
9 发布问题
10 </div>
11 <div class="card-body">
12 <form action="{{ route('questions.store') }}" method="post">
13 {{--注意要有csrftoken--}}
14 @csrf
15 <div class="form-group">
16 <label for="title">标题</label>
17 <input type="text" name="title" class="form-control" placeholder="标题" id="title">
18 <p class="text text-danger"> @error('title') {{ $message }} @enderror </p>
19 </div>
20 <!-- 编辑器容器 -->
21 <script id="container" name="content" type="text/plain"></script>
22 <p class="text text-danger"> @error('content') {{ $message }} @enderror </p>
23 <!--发布按钮-->
24 <button type="submit" class="btn btn-primary mt-2 float-md-right">发布问题</button>
25 </form>
26 </div>
27 </div>
28 </div>
29 </div>
30 </div>
31
32 <!-- 实例化编辑器 -->
33 <script type="text/javascript">
34 var ue = UE.getEditor('container');
35 ue.ready(function () {
36 ue.execCommand('serverparam', '_token', '{{ csrf_token() }}'); // 设置 CSRF token.
37 });
38 </script>
39
40 @endsection
41

效果如图:

注意:为了上传图片可以读写,请事前执行一下命令:

  1 php artisan storage:link

图片上传的具体配置上传大小,格式,位置都是由config/ueditor.php中 ‘upload’列里保存配置信息来具体设置的

由于提交后的数据是由QuestionController中的store方法来处理的,先测试提交一个数据用 dd()方法查看数据:

所以现在来编辑store方法,代码如下:

  1 public function store(Request $request)
2 {
3 //
4 $data = $request->validate([
5 'title' => 'required|min:8',
6 'content' => 'required|min:8',
7 ]);
8
9 $data['user_id'] = auth()->user()->id;
10
11 $question = Question::create($data);
12
13 return redirect()->route('questions.show', $question);
14 }

由于上一节中问题数据库迁移设计的时候,忘记了user_id字段,所以添加一下,具体方法参考:Laravel 6.X 数据库迁移 创建表 与 修改表

执行:

  1 php artisan make:migration add_user_id_to_questions_table --table=questions

其中代码

然后执行:

  1 php artisan migrate

记得添加Question模型中的 属性值

  1 protected $fillable = ['title', 'content', 'user_id']; //否则会提示MassAssignmentException ,也可以使用guard属性 具体看官方文档

store方法中,保存了数据之后,就跳转至show route,会由QuestionController的show方法来处理请求,我们先测试一下 提交问题之后,结果如图:

修改show方法中的代码如下:

  1 /**
2 * Display the specified resource.
3 *
4 * @param Question $question
5 * @return \Illuminate\Http\Response
6 */
7 public function show(Question $question)
8 {
9 //
10 return view('questions.show', compact('question'));
11 }
12

接下来,在views/questions文件夹下创建一个show.blade.php文件:其中代码如下:

  1 @extends('layouts.app')
2
3 @section('content')
4
5 <div class="container">
6 <div class="row">
7 <div class="col-md-8 col-md offset-2">
8 <div class="card">
9 <div class="card-header">
10 {{ $question->title }}
11 </div>
12 <div class="card-body">
13 {!! $question->content !!}
14 </div>
15 </div>
16 </div>
17 </div>
18 </div>
19
20 @endsection
21

最后结果:

Laravel Vuejs 实战:开发知乎 (6)发布问题的更多相关文章

  1. Laravel Vuejs 实战:开发知乎 (10)使用 Select2 优化话题选择

    1.添加选择Topic 使用Select2,如何安装Select2 ,具体使用实例 Select2 and Laravel: Ajax Autocomplete 及 Loading data remo ...

  2. Laravel Vuejs 实战:开发知乎 (8)美化编辑器

    1.使用UEditor增量包: simple-ueditors 执行下载: git clone https://github.com/JellyBool/simple-ueditor.git 2.用此 ...

  3. Laravel Vuejs 实战:开发知乎 (9)定义话题与问题关系

    1.话题[Topic] 执行命令: php artisan make:model Topic –cmr 修改****_**_**_create_topics_table.php数据库迁移文件如下: c ...

  4. Laravel Vuejs 实战:开发知乎 (7)验证问题表单字段

    上一节代码中已经实现 下面代码中的validate内部配置就是: public function store(Request $request) { // $data = $request->v ...

  5. Laravel Vuejs 实战:开发知乎 (3)本地化和自定义消息

    1.本地化 由于所有blade默认采用的是 _('')方式输出标签文本,所以可以安装一个语言包,直接指定本地语言为zh_CN即可: 安装 https://github.com/caouecs/Lara ...

  6. Laravel Vuejs 实战:开发知乎 (2)用户登录

    1.安装一个给用户提示的扩展包: 二选一: https://github.com/laracasts/flash [我选的这个]https://github.com/oanhnn/laravel-fl ...

  7. Laravel Vuejs 实战:开发知乎 (2)用户注册

    1.本节需要发送验证邮件 2.教程使用SendCloud发送邮件 [我使用的是mailtrap] 3. composer require laravel/ui 安装完成后 php artisan ui ...

  8. Laravel Vuejs 实战:开发知乎 (1)项目环境配置和用户表设计

    1.使用laragon新建laravel项目 zhihu 2.配置env文件的database设置 DB_DATABASE=zhihu 3.分析users表需要的字段 4.修改数据库迁移文件: cla ...

  9. Laravel Vuejs 实战:开发知乎 (5)设计问题表

    1.执行命令: php artisan make:model Models/Question -cm 2.设计问题的数据库迁移文件中的字段: <?php use Illuminate\Datab ...

随机推荐

  1. Vue中自动获取input焦点

    <input v-focus type="text" name="search" ref="input" autofocus v-mo ...

  2. ServletContext总结(转)

    今天我们学习的是ServletContext的应用. WEB容器在启动时,它会为每个WEB应用程序都创建一个对应的ServletContext对象,它代表当前web应用. ServletConfig对 ...

  3. wamp 安装

    下载地址:http://www.wampserver.com/ 安装 完成安装 安装目录下打开 安装成功

  4. 杭电ACM 1713 相遇周期

    相遇周期 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submis ...

  5. 素问 - IC跨期套利

    摘自<小韭的学习圈> Q 我现在是长持ic.我观察到IC1907和IC1909的贴水差会有波动.有时候,IC 1907涨的多,有时候IC1909涨的多.而在某一天这个趋势相对是稳定的. 那 ...

  6. Docker - 最近的踩到的一些坑

    概述 最近学习 docker 遇到的 坑 1. dockerfile: 安装命令 概述 安装命令 坑 选项参数里, 一定要 带 -y 不带的话, 基本会阻塞构建 2. 其他: 处理问题, 一定不能慌 ...

  7. Sliding Window POJ - 2823 单调队列模板题

    Sliding Window POJ - 2823 单调队列模板题 题意 给出一个数列 并且给出一个数m 问每个连续的m中的最小\最大值是多少,并输出 思路 使用单调队列来写,拿最小值来举例 要求区间 ...

  8. TCP协议的3次握手与4次挥手过程【深度详解】

    一.前沿 尽管TCP和UDP都使用相同的网络层(IP),TCP却向应用层提供与UDP完全不同的服务.TCP提供一种面向连接的.可靠的字节流服务.面向连接意味着两个使用TCP的应用(通常是一个客户和一个 ...

  9. 搭建FEBS权限系统

    在码云看到一个FEBS权限系统,但是没有找到搭建手册,自己记录一下. 1.下载项目:https://github.com/wuyouzhuguli/FEBS-Shiro2.创建数据库:执行sql文件夹 ...

  10. 自定义ViewPager,避免左右滑动时与水平滑动控件冲突

    import android.content.Context;import android.support.v4.view.ViewPager;import android.util.Attribut ...