dollar/生成器

此包最新版本(1.1)没有可用的许可证信息。

Laravel 4 生成器与 Bootstrap 3

1.1 2013-12-14 04:48 UTC

This package is not auto-updated.

Last update: 2024-09-28 16:45:34 UTC


README

从 JeffreyWay/Laravel-4-Generators 分支而来。

此包更新了Jeffrey Way原始作品提供的视图,以适配Bootstrap 3。以下是Way作品的原始文档。说明已经更新,以反映此包中的任何更改。

此Laravel 4包提供各种生成器,以加快您的开发过程。这些生成器包括

  • generate:model
  • generate:controller
  • generate:seed
  • generate:view
  • generate:migration
  • generate:resource
  • generate:scaffold
  • generate:form
  • generate:test
  • generate:pivot <-- 新功能!!

喜欢视频教程吗?

请见此处。

安装

首先,通过Composer安装此包。编辑项目中的composer.json文件,要求dollar/generators

"require": {
	"laravel/framework": "4.0.*",
	"dollar/generators": "dev-master"
},
"minimum-stability" : "dev"

接下来,在终端更新Composer

composer update

此操作完成后,最后一步是添加服务提供者。打开app/config/app.php,并将新项添加到提供者数组中。

'Dollar\Generators\GeneratorsServiceProvider'

就这样!您已经准备就绪。从终端运行artisan命令,以查看新的generate命令。

php artisan

还有一个Sublime Text插件可用于协助生成器。当然,在您学习以下语法之前,请使用它。

用法

将生成器视为加快工作流程的简单方法。与其打开模型目录、创建新文件、保存它并添加类,您只需运行单个生成命令。

迁移

Laravel 4提供了一个迁移生成器,但它仅创建模式(或表的字段)。让我们通过使用generate:migration来查看一些示例。

php artisan generate:migration create_posts_table

如果我们没有指定fields选项,将在app/database/migrations中创建以下文件。

<?php

use Illuminate\Database\Migrations\Migration;

class CreatePostsTable extends Migration {

    /**
	 * Run the migrations.
	 *
	 * @return void
	 */
	public function up()
	{
	  Schema::create('posts', function($table)
	  {
	    $table->increments('id');

	    $table->timestamps();
	  });
	}

	/**
	 * Reverse the migrations.
	 *
	 * @return void
	 */
	public function down()
	{
	  Schema::drop('posts');
	}

}

请注意,生成器足够智能,可以检测到您正在尝试创建一个表。当命名迁移时,尽量使其尽可能描述性。迁移生成器将检测您的迁移名称中的第一个单词,并尽可能确定如何进行。因此,对于create_posts_table,关键字是"create",这意味着我们应该准备必要的模式以创建一个表。

如果您使用类似add_user_id_to_posts_table的迁移名称,在这种情况下,关键字是"add",这表明我们打算向现有表中添加行。让我们看看它将生成什么。

php artisan generate:migration add_user_id_to_posts_table

这将准备以下样板代码

<?php

use Illuminate\Database\Migrations\Migration;

class AddUserIdToPostsTable extends Migration {

    /**
	 * Run the migrations.
	 *
	 * @return void
	 */
	public function up()
	{
	  Schema::table('posts', function($table)
	  {

	  });
	}

	/**
	 * Reverse the migrations.
	 *
	 * @return void
	 */
	public function down()
	{
	  Schema::table('posts', function($table)
	  {

	  });
	}

}

请注意,这一次,我们并没有使用Schema::create

关键字

在编写迁移名称时,请使用以下关键字为生成器提供提示。

  • createmake(例如create_users_table
  • addinsert(例如add_user_id_to_posts_table
  • removedropdelete(例如remove_user_id_from_posts_table

生成模式

这已经很棒了,但让我们更进一步,也使用 fields 选项生成架构。

php artisan generate:migration create_posts_table --fields="title:string, body:text"

在我们解释这个新选项之前,让我们看看输出结果

<?php

use Illuminate\Database\Migrations\Migration;

class CreatePostsTable extends Migration {

    /**
	 * Run the migrations.
	 *
	 * @return void
	 */
	public function up()
	{
	  Schema::create('posts', function($table)
	  {
	    $table->increments('id');
	    $table->string('title');
	    $table->text('body');
	    $table->timestamps();
	  });
	}

	/**
	 * Reverse the migrations.
	 *
	 * @return void
	 */
	public function down()
	{
	  Schema::drop('posts');
	}

}

太好了!这里有几个需要注意的地方

  • 生成器会自动将 id 设置为主键。
  • 它还会添加时间戳,因为这种情况更为常见。
  • 它解析了 fields 选项,并添加了这些字段。
  • 删除方法足够智能,能意识到反向操作时应该完全删除表。

要声明字段,使用以逗号分隔的键:值:选项集列表,其中 key 是字段的名称,value列类型,而 option 是指定索引等方式的方法,如 uniquenullable。以下是一些示例

  • --fields="first:string, last:string"
  • --fields="age:integer, yob:date"
  • --fields="username:string:unique, age:integer:nullable"
  • --fields="name:string:default('John'), email:string:unique:nullable"
  • --fields="username:string[30]:unique, age:integer:nullable"

请注意最后一个示例,我们指定了字符限制:string[30]。这将产生 $table->string('username', 30)->unique();

可以通过以下命令来删除表

php artisan generate:migration destroy_posts_table

如果您想设置一个精确的 artisan 回滚选项,请也将 fields 选项设置好

php artisan generate:migration destroy_posts_table --fields="title:string, body:text"

作为最后的演示,让我们运行一个迁移来从 tasks 表中删除 completed 字段。

php artisan generate:migration remove_completed_from_tasks_table --fields="completed:boolean"

这次,因为我们使用了 "remove" 关键字,生成器明白它应该删除列,并在 down() 方法中重新添加。

<?php

use Illuminate\Database\Migrations\Migration;

class RemoveCompletedFromTasksTable extends Migration {

    /**
	 * Run the migrations.
	 *
	 * @return void
	 */
	public function up()
	{
	  Schema::table('tasks', function($table)
	  {
	    $table->dropColumn('completed');
	  });
	}

	/**
	 * Reverse the migrations.
	 *
	 * @return void
	 */
	public function down()
	{
	  Schema::table('tasks', function($table)
	  {
	    $table->boolean('completed');
	  });
	}

}

模型

php artisan generate:model Post

这将创建文件,app/models/Post.php 并插入以下样板

<?php

class Post extends Eloquent {

}

视图

php artisan generate:view dog

此命令将生成 app/views/dog.blade.php 和一个简单的字符串,以便于使用。

The dog.blade.php view.

与所有命令一样,您可以指定一个 --path 选项将此文件放在其他位置。

php artisan generate:view index --path=views/dogs

现在,我们得到:app/views/dogs/index.blade.php

种子

Laravel 4 以灵活的方式为我们提供了创建新表的方法。

php artisan generate:seed dogs

将参数设置为需要种子文件的表名。这将生成 app/database/seeds/DogsTableSeeder.php 并填充它

<?php

class DogsTableSeeder extends Seeder {

  public function run()
  {
    $dogs = [

    ];

    DB::table('Dogs')->insert($dogs);
  }

}

此命令还会更新 app/database/seeds/DatabaseSeeder.php 以包含对新的种子类的调用,这是 Laravel 所要求的。

要完全填充 dogs

  • $dogs 数组中,添加任意数量的数组,包含必要的行。
  • 回到终端并运行 Laravel 的 db:seed 命令 (php artisan db:seed)。

资源

资源生成器就像是一个大馅饼。它会调用所有的兄弟生成命令。假设以下命令

php artisan generate:resource dog --fields="name:string"

以下操作将发生

  • 创建一个带有名称列的 create_dogs_table 迁移。
  • 创建一个 Dog.php 模型。
  • 创建一个包含 indexshowcreateedit 视图的 views/dogs 文件夹。
  • 创建一个 database/seeds/DogsTableSeeder.php 种子文件。
  • 更新 DatabaseSeeder.php 以运行 DogsTableSeeder
  • 创建 controllers/DogsController.php,并填充它以包含 RESTful 方法。
  • 更新 routes.php 以包括:Route::resource('dogs', 'DogsController')
  • 创建一个 tests/controllers/DogsControllerTest.php 文件,并填充一些样板测试以供您开始。

请注意,资源名称是单数形式——与您命名模型的方式相同。

工作流程

让我们创建一个用于以 RESTful 方式显示狗的资源。

php artisan generate:resource dog --fields="name:string, age:integer"

接下来,我们将初始化这个新的 dogs 表。打开 database/seeds/DogsTableSeeder.php 并添加几行。记住,你只需要编辑此文件中的 $dogs 数组。

$dogs = [
    ['name' => 'Sparky', 'age' => 5],
    ['name' => 'Joe', 'age' => 11]
];

现在,迁移数据库并初始化 dogs 表。

php artisan migrate
php artisan db:seed

最后,当访问 dogs/ 路由时,让我们显示这两只狗。编辑 controllers/DogsController.php,并更新 index 方法,如下所示

public function index()
{
    return View::make('dogs.index')
		->with('dogs', Dog::all());
}

最后一步是更新视图以显示传递给它的每个帖子。打开 views/dogs/index.blade.php 并添加

<ul>
    @foreach($dogs as $dog)
		<li>{{ $dog->name }} : {{ $dog->age }}</li>
	@endforeach
</ul>

好吧,好吧,我们不是在用正确的HTML布局文件。谁在乎呢;这只是个例子,傻瓜。

无论如何,一切都准备好了。运行服务器,并浏览到 localhost:8000/dogs 来查看你的列表。

php artisan serve
  • Sparky : 5
  • Joe : 11

这难道不是比手动编写所有这些内容要快得多吗?为了完成,让我们运行测试以确保一切按预期工作。

phpunit

并且...结果是绿色的!

脚手架

scaffolding

将脚手架视为资源的一个扩展。它具有完全相同的界面。

php artisan generate:scaffold tweet --fields="author:string, body:text"

唯一的区别是它会处理所有样板代码。这特别适用于原型设计——甚至可以学习如何做基本的事情,例如从数据库表中删除记录,或者构建表单,或者对表单进行验证。

view scaffold

view validation

表单

这个方便的新生成器允许你使用单个命令,根据提供的模型属性生成表单所需的HTML。也许一个例子是有必要的

php artisan generate:form tweet

假设我有一个 Tweet 模型和它相关的 tweet 表,这个命令将输出

{{ Form::open(array('route' => 'tweets.store')) }}
    <ul>
        <li>
            {{ Form::label('author', 'Author:') }}
            {{ Form::text('author') }}
        </li>

        <li>
            {{ Form::label('body', 'Body:') }}
            {{ Form::textarea('body') }}
        </li>

        <li>
            {{ Form::submit() }}
        </li>
    </ul>
{{ Form::close() }}

很酷,不是吗?它读取属性和数据类型,为你准备了标记!又少了一件要担心的事情!

指定表单的方法

但是,如果你打算更新资源而不是创建新资源呢?在这种情况下,使用 --method 选项。

php artisan generate:form tweet --method="update"

这将生成相同的HTML,但是,根据需要,Form::open() 方法将被调整

{{ Form::open(array('method' => 'PATCH', 'route' => 'tweets.update')) }}

方法选项可以接受任意数量的值(添加、编辑、更新、提交、创建等),但本质上,你只是在告诉它你是否在创建或编辑资源。因此,只有两种可能的输出:POSTPATCH(前者是默认值)。

自定义HTML

如果你不喜欢使用无序列表作为表单呢?使用 --html 选项,以及你喜欢的元素名称

php artisan generate:form tweet --html="div"

现在,我们将元素放在 div 中!

{{ Form::open(array('route' => 'tweets.store')) }}
    <div>
        {{ Form::label('author', 'Author:') }}
        {{ Form::text('author') }}
    </div>

    <div>
        {{ Form::label('body', 'Body:') }}
        {{ Form::textarea('body') }}
    </div>

    <div>
        {{ Form::submit() }}
    </div>
{{ Form::close() }}

复制和保存

至少目前,与这个包中的其他生成器不同,这个命令将输出表单,此时你可以复制并粘贴到需要的地方。当然,你可以使用现有工具将输出传递到剪贴板或保存到文件。例如

# copy the output to the clipboard
php artisan generate:form tweet | pbcopy

# save it to a form partial
php artisan generate:form tweet > app/views/posts/form.blade.php

测试

当你需要创建新的PHPUnit测试类时使用 generate:test。以下是一个示例

php artisan generate:test FooTest

这将产生 app/tests/FooTest.php

<?php

class FooTest extends TestCase {

    public function test()
    {

    }

}

交叉表

创建可连接/枢轴表有时可能会令人困惑。

  • 表名应该是复数吗?
  • 我们应该按什么顺序编写表名才能让Laravel高兴?
  • 枢轴表应该包含哪些字段?

现在这个过程可以自动化。只需调用 generate:pivot 命令,并提供应该可连接的表名。例如,一篇帖子可以有多个标签,一个标签可以有多个帖子。运行以下命令创建必要的枢轴表。

php artisan generate:pivot posts tags

你提供表名(或是否复数化)的顺序无关紧要。该命令将正确创建一个具有 post_idtag_id 字段的 post_tag 迁移。

Schema::create('post_tag', function(Blueprint $table) {
    $table->integer('post_id');
    $table->integer('tag_id');
});

最后,简单地迁移数据库以创建它。

php artisan migrate

枢轴表完成!

把所有东西放在一起,我们从零开始做。我们需要一个帖子表、一个标签表以及连接这两个表的枢纽表。我们可以轻松地使用生成器来完成这项任务。

php artisan generate:migration create_posts_table --fields="title:string, description:text"

php artisan generate:migration create_tags_table --fields="name:string"

php artisan generate:pivot posts tags