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

<?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 让我如此高效. :beer:

最后奉上 Jeff 的视频介绍 http://pan.baidu.com/s/1dD5XZHn


欢迎关注 LaravelTips, 这是一个专注于为 Laravel 开发者服务, 致力于帮助开发者更好的掌握 Laravel 框架, 提升开发效率的微信公众号.

摈弃世俗浮躁,追求技术精湛
本帖已被设为精华帖!
Summer
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 3
Summer

@perryhau 就是默认的 oh-my-zsh 配置

10年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!