利用 Generators 快速构建 Laravel 应用
说明#
Laravel4 最吸引我的地方,就是其快速构建 App 的能力,其快速构架也得益于 Generators
这个 Package.
Generators 是一个代码生成器,允许你在执行一行命令的情况下快速生成代码文件,借鉴于 Ruby On Rails 的 rails generate
命令,见这里.
Jeffrey Way 的 Laravel-4-Generators , 很长一段时间在 http://packalyst.com/ 下载量排名第一,算是 Laravel 开发的时候最基本的 Package 了,见下图.
安装#
1. 编辑 composer.json
文件,加入 require package#
"require-dev": {
"way/generators": "2.*"
}
2. 接下来,命令行下运行#
composer update --dev
3. 编辑 app/config/app.php
文件,加入 providers
#
'Way\Generators\GeneratorsServiceProvider'
4. 这时候在命令行下运行#
php artisan
可以看到多了以下的命令
至此安装成功.
命令介绍#
- generate:model --> 生成 model 文件;
- generate:view --> 生成 view 文件,分别是 create, show, edit, delete ;
- generate:controller --> 生成
restful
controller; - generate:seed --> 数据库假数据填充文件;
- generate:migration --> 数据库表结构描述文件;
- generate:pivot --> 数据库关联表生成;
- generate:resource --> 生成一堆文件,model + controller + view + seed + migration;
- generate:scaffold --> 我最喜欢的命令,生成最多的代码,和
resource
类似的生成一堆文件,不同的是会在这些文件里面加入内容.
关于每个命令的使用,官方文档写的很清楚,这里就不继续讲了. 详细使用方法见这里.
generate:scaffold 脚手架一个应用#
这里演示下 generate:scaffold
能做的事情,以 phphub
的 topics
功能为例子:
php artisan generate:scaffold topic --fields="title:string, \
body:text, author:string, user_id:integer, node_id:integer,\
is_excellent:boolean, is_block:boolean, reply_count:integer, \
view_court:integer, favorite_count:integer, vote_count:integer"
执行上面命令得到下图:
下图是此次创建的文件列表:
咱们在看下 TopicsController.php
文件,基于 Restful Controller
的模版
<?php
class TopicsController extends \BaseController {
/**
* Display a listing of topics
* 列表页面
*
* @return Response
*/
public function index()
{
$topics = Topic::all();
return View::make('topics.index', compact('topics'));
}
/**
* Show the form for creating a new topic
* 撰写主题页面
*
* @return Response
*/
public function create()
{
return View::make('topics.create');
}
/**
* Store a newly created topic in storage.
* 接收 post 过来的数据, 并入库
*
* @return Response
*/
public function store()
{
$validator = Validator::make($data = Input::all(), Topic::$rules);
if ($validator->fails())
{
return Redirect::back()->withErrors($validator)->withInput();
}
Topic::create($data);
return Redirect::route('topics.index');
}
/**
* Display the specified topic.
* 查看某个主题
*
* @param int $id
* @return Response
*/
public function show($id)
{
$topic = Topic::findOrFail($id);
return View::make('topics.show', compact('topic'));
}
/**
* Show the form for editing the specified topic.
* 编辑主题页面
*
* @param int $id
* @return Response
*/
public function edit($id)
{
$topic = Topic::find($id);
return View::make('topics.edit', compact('topic'));
}
/**
* Update the specified topic in storage.
* 接收 edit 页面 Post 过来的数据进行更新
*
* @param int $id
* @return Response
*/
public function update($id)
{
$topic = Topic::findOrFail($id);
$validator = Validator::make($data = Input::all(), Topic::$rules);
if ($validator->fails())
{
return Redirect::back()->withErrors($validator)->withInput();
}
$topic->update($data);
return Redirect::route('topics.index');
}
/**
* Remove the specified topic from storage.
* 删除对应 $id 的信息
*
* @param int $id
* @return Response
*/
public function destroy($id)
{
Topic::destroy($id);
return Redirect::route('topics.index');
}
}
Generators 已经成为我每一个 Laravel 项目里面必备的 Package
, 因为 ta 让我如此高效.
最后奉上 Jeff 的视频介绍 http://pan.baidu.com/s/1dD5XZHn
欢迎关注 LaravelTips
, 这是一个专注于为 Laravel 开发者服务,致力于帮助开发者更好的掌握 Laravel 框架,提升开发效率的微信公众号.
推荐文章: