利用 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
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
讨论数量: 3
Summer

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

9年前 评论

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