利用 Generators 快速构建 Laravel 应用

教程 Summer ⋅ 于 3年前 ⋅ 最后回复由 monkey 3年前 ⋅ 11618 阅读

说明

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 框架, 提升开发效率的微信公众号.


:book: Laravel 书籍:

本帖已被设为精华帖!
回复数量: 3
暂无评论~~
  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
  请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!
Ctrl+Enter