我们开发时遵守的代码风格是 Laravel 项目开发规范。遵照此规范,在实际操作中,有许多重复,接下来推荐一款专为此规范量身定制的代码生成器 —— Laravel 5.x Scaffold Generator 。代码生成器能让你通过执行一条 Artisan 命令,完成注册路由、新建模型、新建表单验证类、新建资源控制器以及所需视图文件等任务,不仅约束了项目开发的风格,还能极大地提高我们的开发效率。
在接下来的 LaraBBS 项目开发中,我们将利用此扩展来快速构建项目原型。
后续章节我们将『Laravel 5.x Scaffold Generator』简称为『代码生成器』,或者『生成器』。
安装
1. 通过 Composer 安装
$ composer require "summerblue/generator:~0.5" --dev
2. 添加 Service Provider
打开/app/Providers/AppServiceProvider.php 添加注册
public function register()
{
if (app()->environment() == 'local' || app()->environment() == 'testing') {
$this->app->register(\Summerblue\Generator\GeneratorsServiceProvider::class);
}
}
使用前先整理表字段
在使用代码生成器之前,我们需要先整理好 topics
表的字段名称和字段类型:
字段名称 | 描述 | 字段类型 | 加索引缘由 | 其他 |
---|---|---|---|---|
title |
帖子标题 | 字符串(String) | 文章搜索 | 无 |
body |
帖子内容 | 文本(text) | 不需要 | 无 |
user_id |
用户 ID | 整数(int) | 数据关联 | unsigned() |
category_id |
分类 ID | 整数(int) | 数据关联 | unsigned() |
reply_count |
回复数量 | 整数(int) | 文章回复数量排序 | unsigned() , default(0) |
view_count |
查看总数 | 整数(int) | 文章查看数量排序 | unsigned() , default(0) |
last_reply_user_id |
最后回复的用户 ID | 整数(int) | 数据关联 | unsigned() , default(0) |
order |
可用来做排序使用 | 整数(int) | 不需要 | default(0) |
excerpt |
文章摘要,SEO 优化时使用 | 文本(text) | 不需要 | 无 |
slug |
SEO 友好的 URI | 字符串(String) | 不需要 | nullable() |
unsigned()
—— 设置不需要标识符(unsigned)default()
—— 为字段添加默认值。nullable()
—— 可为空
以上字段,拼接为最终命令:
$ php artisan make:scaffold Topic --schema="title:string:index,body:text,user_id:integer:unsigned:index,category_id:integer:unsigned:index,reply_count:integer:unsigned:default(0),view_count:integer:unsigned:default(0),last_reply_user_id:integer:unsigned:default(0),order:integer:unsigned:default(0),excerpt:text,slug:string:nullable"
执行结果:
命令 make:scaffold
的 --schema
选项中是以逗号分隔的字段名称和设置信息,字段分别如下,对于上面的字段表格:
title:string:index
body:text
user_id:integer:unsigned:index
category_id:integer:unsigned:index
reply_count:integer:unsigned:default(0)
view_count:integer:unsigned:default(0)
last_reply_user_id:integer:unsigned:default(0)
order:integer:unsigned:default(0)
excerpt:text
slug:string:nullable
接下来我们看下代码生成器为我们做了哪些事情:
- 创建话题的数据库迁移文件 —— 2017_09_26_111713_create_topics_table.php;
- 创建话题数据工厂文件 —— TopicFactory.php;
- 创建话题数据填充文件 —— TopicsTableSeeder.php;
- 创建模型基类文件 —— Model.php, 并创建话题数据模型;
- 创建话题控制器 —— TopicsController.php;
- 创建表单请求的基类文件 —— Request.php,并创建话题表单请求验证类;
- 创建话题模型事件监控器
TopicObserver
并在AppServiceProvider
中注册; - 创建授权策略基类文件 —— Policy.php,同时创建话题授权类,并在
AuthServiceProvider
中注册; - 在 web.php 中更新路由,新增话题相关的资源路由;
- 新建符合资源控制器要求的三个话题视图文件,并存放于
resources/views/topics
目录中; - 执行了数据库迁移命令
artisan migrate
; - 因此次操作新建了多个文件,最终执行
composer dump-autoload
来生成 classmap。
开始测试
此时打开 http://larabbs.test/topics ,查看话题列表页面:
打开 http://larabbs.test/topics/create 会被跳转到登录页面,登录成功后会自动跳转到:
评论