__                           _             
  / /  __ _ _ __ __ ___   _____| |            
 / /  / _` | '__/ _` \ \ / / _ \ |            
/ /__| (_| | | | (_| |\ V /  __/ |            
\____/\__,_|_|  \__,_| \_/ \___|_|            
                                              
   ___                          _             
  / _ \___ _ __   ___ _ __ __ _| |_ ___  _ __ 
 / /_\/ _ \ '_ \ / _ \ '__/ _` | __/ _ \| '__|
/ /_\\  __/ | | |  __/ | | (_| | || (_) | |   
\____/\___|_| |_|\___|_|  \__,_|\__\___/|_|   
Important: Using Laravel 4? Use this project instead.
On its own, when running migrations, Laravel simply creates the specified file, and adds a bit of boilerplate code. It's then up to you to fill in the Schema and such. ...Well that's a pain.
This generator task will fill in the gaps. It can generate several things:
Simply download the generate.php file from this repo, and save it to your application/tasks/ directory. Now, we can execute the various methods from the command line, via Artisan.
To generate a controller for your project, run:
  php artisan generate:controller AdminThis will create a file, application/controllers/admin.php, with the following contents:
<?php 
class Admin_Controller extends Base_Controller 
{
}However, we can also create methods/actions as well.
  php artisan generate:controller Admin index show editThe arguments that we specify after the controller name (Admin) represent the methods that we desire.
<?php 
class Admin_Controller extends Base_Controller 
{
	public function action_index()
	{
	}
	public function action_show()
	{
	}
	public function action_edit()
	{
	}
}But, what if we want to use restful methods? Well just add restful as any argument, like this:
php artisan generate:controller Admin restful index index:postThat will produce.
<?php 
class Admin_Controller extends Base_Controller 
{
	public $restful = true;
	public function get_index()
	{
	}
	public function post_index()
	{
	}
}Sweet! It's-a-nice. When using restful methods, you can specify the verb after a : - index:post or maybe update:put.
Lastly, if you need to create nested controllers, follow the period convention:
php artisan generate:controller admin.panelThis will produce "controllers/admin/panel.php" with the following contents:
<?php
class Admin_Panel_Controller extends Base_Controller {
}So that's the controller generator.
For now, models generation is very simplistic.
php artisan generate:model userWill produce:
<?php
class User extends Eloquent 
{
}We can also generate migrations and schema. Let's say that we need to create a users table in the DB. Type:
php artisan generate:migration create_users_tableNotice that we separate each word with an underscore, and use a keyword, like create, update, delete, or add.
This will create a new file in application/migrations/ that contains:
<?php 
    
class Create_Users_Table
{
    public function up()
    {
        Schema::create('users', function($table)
        {
			$table->timestamps();
        });
    }
    public function down()
    {
        Schema::drop('users');
	}
}Not bad, not bad. But what about the schema? Let's specify the fields for the table.
php artisan generate:migration create_users_table id:integer name:string email_address:stringThat will give us:
<?php 
    
class Create_Users_Table
{
    public function up()
    {
        Schema::create('users', function($table)
        {
			$table->increments('id');
			$table->string('name');
			$table->string('email_address');
			$table->timestamps();
        });
    }
    public function down()
    {
        Schema::drop('users');
	}
}Ahh hell yeah. Notice that it automatically applies the timestamps(). A bit opinionated maybe, but it only takes a second to delete, if you don't want them.
You can also specify other options, such as making your email field unique, or the age field optional - like this:
php artisan generate:migration create_users_table name:string email_address:string:unique age:integer:nullableNow we get:
<?php 
    
class Create_Users_Table
{
    public function up()
    {
        Schema::create('users', function($table)
        {
			$table->increments('id');
			$table->string('name');
			$table->string('email_address')->unique();
			$table->integer('age')->nullable();
			$table->timestamps();
        });
    }
    public function down()
    {
        Schema::drop('users');
	}
}Sweet!
It's important to remember that the script tries to figure out what you're trying to accomplish. So it's important that you use keywords, like "add" or "delete". Here's some examples:
php artisan generate:migration add_user_id_to_posts_table user_id:integer
php artisan generate:migration delete_user_id_from_posts_table user_id:integer
php artisan generate:migration create_posts_table title:string body:textThere's three best practices worth noting here:
- Our class/file names are very readable. That's important.
- The script uses the word that comes before "_table" as the table name. So, for create_users_table, it'll set the table name tousers.
- I've used the CRUD keywords to describe what I want to do.
If we run the second example:
php artisan generate:migration delete_user_id_from_posts_table user_id:integer...we get:
<?php 
    
class Delete_User_Id_From_Posts_Table
{
    public function up()
    {
        Schema::table('posts', function($table)
        {
			$table->drop_column('user_id');
        });
    }
    public function down()
    {
        Schema::table('posts', function($table)
        {
			$table->integer('user_id');
		});
	}
}Views are a cinch to generate.
php artisan generate:view index showThis will create two files within the views folder:
- index.blade.php
- show.blade.php
You can also specify subdirectories, via the period.
php artisan generate:view home.index home.editWhich will create:
- home/index.blade.php
- home/edit.blade.php
But what if you want to save some time, and add a few things at once? Generating a resource will produce a controller, model, and view files. For example:
    php artisan generate:resource post index showThis will create:
- A post.phpmodel
- A posts.phpcontroller with index + show actions
- A post views folder with index.blade.phpandshow.blade.phpviews.
So let's rapidly generate a resource for blog posts.
php artisan generate:resource post index show
php artisan generate:migration create_posts_table id:integer title:string body:text
php artisan migrate Of course, if you haven't already installed the migrations table, you'd do that first: php artisan migrate:install.
With those three lines of code, you now have:
- A controller with two actions
- A post model
- a post views folder with two views: index and show
- A new poststable in your db with id, title, and body fields.
Nifty, ay?
Just as a convenience, you can also generate stylesheets and scripts through the command line.
php artisan generate:assets style.css style2.css admin/script.jsThis will create three files:
public/css/style.css
public/css/style2.css
public/js/admin/script.jsNote: that may seem like a lot to write for a simple task, but you can always create aliases for this stuff.
alias la="php artisan generate:assets";Now, it's as easy as doing:
la style.css script.jsThe default directory paths are:
- CSS => public/css/
- JavaScript => public/js/
- CoffeeScript => public/js/coffee/
- Sass (sass or scss extension) => public/css/sass
If the generator detects that you're attempting to create a script or stylesheet that has the same name as one of the popular libraries/frameworks, it will automatically download the latest version of the asset for you. For instance:
php artisan generate:assets main.js underscore.jsWill generate two files: main.js and underscore.js. However, it'll detect that you likely want the Underscore.js library and will download it for you.
A handful of external assets are provided by default, but you're free to add more. Just hunt down the $external_assets array within the generator script.
public static $external_assets = array(
    // JavaScripts
    'jquery.js' => 'http://code.jquery.com/jquery.js',
    'backbone.js' => 'http://backbonejs.org/backbone.js',
    'underscore.js' => 'http://underscorejs.org/underscore.js',
    'handlebars.js' => 'http://cloud.github.com/downloads/wycats/handlebars.js/handlebars-1.0.rc.1.js',
    // CSS
    'normalize.css' => 'https://raw.github.com/necolas/normalize.css/master/normalize.css'
);Laravel Generator can also generate PHPUnit test classes for you, like so:
php artisan generate:test userIf you only specify a class name, as we've done above, you'll get:
<?php
// application/tests/user.test.php
class User_Test extends PHPUnit_Framework_TestCase 
{
}However, you can also add test cases as well.
php artisan generate:test user can_reset_user_password can_disable_userThis command will now produce:
<?php
class User_Test extends PHPUnit_Framework_TestCase {
    public function test_can_reset_user_password()
    {
    }
    public function test_can_disable_user()
    {
    }
}In addition to using the full generator names, there are also some convenience versions.
- generate:controller=>- generate:c
- generate:model=>- generate:m
- generate:migration=>- generate:mig
- generate:view=>- generate:v
- generate:resource=>- generate:r
- generate:assets=>- generate:a
You could also just create Bash aliases, like this:
alias g:c="php artisan generate:controller";
alias g:m="php artisan generate:model"Now, to create a controller, you can simply type:
g:c config indexRefer here for more alias recommendations.
Let's say that you're working with Backbone, but haven't yet downloaded any of the scripts. Ideally, you'd be using a tool, like Yeoman or Bower, but, if not, do:
php artisan generate:assets jquery.js underscore.js backbone.js main.jsThis will produce four files:
- js/jquery.js
- js/underscore.js
- js/backbone.js
- js/main.js
The first three files will be populated the latest version of their associated libraries/frameworks.