一、创建数据表
创建模型
php artisan make:model Question -m
修改生成数据迁移文件 questions_table.php
public function up()
{
Schema::create('questions', function (Blueprint $table) {
$table->increments('id');
$table->string('title');
$table->text('content');
$table->integer('user_id')->unsigned();
$table->integer('comments_count')->default(0);
$table->integer('followers_count')->default(1);
$table->integer('answers_count')->default(0);
$table->string('close_comment', 8)->default('F');
$table->string('is_hidden', 8)->default('F');
$table->timestamps();
});
}
执行数据迁移
php artisan migrate
修改生成的模型:app/Question.php
protected $fillable = ['title', 'content', 'user_id'];
二、overtrue/laravel-ueditor
下载:https://github.com/overtrue/laravel-ueditor
composer require "overtrue/laravel-ueditor:~1.0"
添加下面一行到 config/app.php 中 providers 部分:
Overtrue\LaravelUEditor\UEditorServiceProvider::class,
发布配置文件与资源
php artisan vendor:publish --provider='Overtrue\LaravelUEditor\UEditorServiceProvider'
修改 public/vendor/ueditor/ueditor.config.js 的 toolbars
[[
'fullscreen', 'bold', 'italic', 'underline', 'fontborder', 'strikethrough', 'removeformat', 'pasteplain', 'forecolor', 'backcolor', 'insertorderedlist', 'insertunorderedlist', 'selectall',
'rowspacingtop', 'rowspacingbottom', 'lineheight', '|',
'customstyle', 'paragraph', 'fontfamily', 'fontsize', 'indent', '|',
'justifyleft', 'justifycenter', 'justifyright', 'justifyjustify', '|',
'link', 'unlink', 'anchor', '|',
'simpleupload', 'insertimage', 'emotion', 'scrawl', 'insertvideo', 'music', 'attachment', 'map', 'gmap', 'insertframe', 'insertcode', 'pagebreak', 'template', 'background', '|',
'horizontal', 'date', 'time', 'spechars', 'snapscreen', 'wordimage', '|',
'inserttable', 'deletetable', 'insertparagraphbeforetable', 'insertrow', 'deleterow', 'insertcol', 'deletecol', 'mergecells', 'mergeright', 'mergedown', 'splittocells', 'splittorows', 'splittocols', 'charts', '|',
'preview', 'searchreplace', 'drafts'
]]
toolbars 参数说明:http://fex.baidu.com/ueditor/#start-toolbar
创建软链接
php artisan storage:link
图片上传七牛:https://github.com/overtrue/laravel-filesystem-qiniu
composer require "overtrue/laravel-filesystem-qiniu:^1.0"
添加下面一行到 config/app.php 中 providers 部分:
Overtrue\LaravelFilesystem\Qiniu\QiniuStorageServiceProvider::class,
修改 config/filesystems.php 的 disks 部分
'qiniu' => [
'driver' => 'qiniu',
'access_key' => env('QINIU_ACCESS_KEY', 'xxxxxxxxxxxxxxxx'),
'secret_key' => env('QINIU_SECRET_KEY', 'xxxxxxxxxxxxxxxx'),
'bucket' => env('QINIU_BUCKET', 'test'),
'domain' => env('QINIU_DOMAIN', 'xxx.clouddn.com'),
],
修改 .env 配置文件
QINIU_ACCESS_KEY=
QINIU_SECRET_KEY=
QINIU_BUCKET=
QINIU_DOMAIN=
修改 config/ueditor.php
'disk' => 'qiniu',
三、发布问题
创建表单验证
php artisan make:request StoreQuestionRequest
修改生成的文件:app/Http/Request/StoreQuestionRequest.php
public function authorize()
{
return true;
}
public function messages()
{
return [
'title.required' => '标题不能为空',
'title.min' => '标题至少3个字符',
'title.max' => '标题最多3个字符',
'content.required' => '内容不能为空',
'content.min' => '内容至少20个字符',
];
}
public function rules()
{
return [
'title' => 'required|min:3|max:196',
'content' => 'required|min:20'
];
}
创建控制器
php artisan make:controller QuestionsController --resource
修改 app/Http/Controllers/QuestionsController.php
use Auth;
use App\Question;
public function __construct()
{
$this->middleware('auth')->except(['index','show']);
}
public function create()
{
return view('questions.create');
}
public function store(StoreQuestionRequest $request)
{
$data = [
'title' => $request->get('title'),
'content' => $request->get('content'),
'user_id' => Auth::id()
];
$question = Question::create($data);
return redirect()->route('questions.show',[$question->id]);
}
public function show($id)
{
$question = Question::find($id);
return view('questions.show', compact('question'));
}
注册路由:routes/web.php
Route::resource('questions', 'QuestionsController');
新建视图:resources/views/questions/create.blade.php
注意:vendor.ueditor.assets 必须在 js 后面
@section('js')
@include('vendor.ueditor.assets')
新建视图:resource/views/questions/show.blade.php
登录用户后访问:http://localhost:8000/questions/create
随便输入标题和内容,点击发布问题
输入符合规则的标题和内容后