利用 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 能做的事情, 以 phphubtopics 功能为例子:

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 的模版

  1. <?php 
  2.  
  3. class TopicsController extends \BaseController { 
  4.  
  5.     /** 
  6.      * Display a listing of topics 
  7.      * 列表页面 
  8.      * 
  9.      * @return Response 
  10.      */ 
  11.     public function index() 
  12.     { 
  13.         $topics = Topic::all(); 
  14.  
  15.         return View::make('topics.index', compact('topics')); 
  16.     } 
  17.  
  18.     /** 
  19.      * Show the form for creating a new topic 
  20.      * 撰写主题页面 
  21.      * 
  22.      * @return Response 
  23.      */ 
  24.     public function create() 
  25.     { 
  26.         return View::make('topics.create'); 
  27.     } 
  28.  
  29.     /** 
  30.      * Store a newly created topic in storage. 
  31.      * 接收 post 过来的数据, 并入库 
  32.      * 
  33.      * @return Response 
  34.      */ 
  35.     public function store() 
  36.     { 
  37.         $validator = Validator::make($data = Input::all(), Topic::$rules); 
  38.  
  39.         if ($validator->fails()) 
  40.         { 
  41.             return Redirect::back()->withErrors($validator)->withInput(); 
  42.         } 
  43.  
  44.         Topic::create($data); 
  45.  
  46.         return Redirect::route('topics.index'); 
  47.     } 
  48.  
  49.     /** 
  50.      * Display the specified topic. 
  51.      * 查看某个主题 
  52.      * 
  53.      * @param  int  $id 
  54.      * @return Response 
  55.      */ 
  56.     public function show($id
  57.     { 
  58.         $topic = Topic::findOrFail($id); 
  59.  
  60.         return View::make('topics.show', compact('topic')); 
  61.     } 
  62.  
  63.     /** 
  64.      * Show the form for editing the specified topic. 
  65.      * 编辑主题页面 
  66.      * 
  67.      * @param  int  $id 
  68.      * @return Response 
  69.      */ 
  70.     public function edit($id
  71.     { 
  72.         $topic = Topic::find($id); 
  73.  
  74.         return View::make('topics.edit', compact('topic')); 
  75.     } 
  76.  
  77.     /** 
  78.      * Update the specified topic in storage. 
  79.      * 接收 edit 页面 Post 过来的数据进行更新 
  80.      * 
  81.      * @param  int  $id 
  82.      * @return Response 
  83.      */ 
  84.     public function update($id
  85.     { 
  86.         $topic = Topic::findOrFail($id); 
  87.  
  88.         $validator = Validator::make($data = Input::all(), Topic::$rules); 
  89.  
  90.         if ($validator->fails()) 
  91.         { 
  92.             return Redirect::back()->withErrors($validator)->withInput(); 
  93.         } 
  94.  
  95.         $topic->update($data); 
  96.  
  97.         return Redirect::route('topics.index'); 
  98.     } 
  99.  
  100.     /** 
  101.      * Remove the specified topic from storage. 
  102.      * 删除对应 $id 的信息 
  103.      *  
  104.      * @param  int  $id 
  105.      * @return Response 
  106.      */ 
  107.     public function destroy($id
  108.     { 
  109.         Topic::destroy($id); 
  110.  
  111.         return Redirect::route('topics.index'); 
  112.     } 
  113.  

转载请注明:代码家园 » 利用 Generators 快速构建 Laravel 应用

评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)