Tasks

Contents

The Basics

Laravel's command-line tool is called Artisan. Artisan can be used to run "tasks" such as migrations, cronjobs, unit-tests, or anything that you want.

Creating & Running Tasks

To create a task create a new class in your application/tasks directory. The class name should be suffixed with "_Task", and should at least have a "run" method, like this:

Creating a task class:

class Notify_Task {

    public function run($arguments)
    {
        // Do awesome notifying…
    }

}

Now you can call the "run" method of your task via the command-line. You can even pass arguments:

Calling a task from the command line:

php artisan notify

Calling a task and passing arguments:

php artisan notify taylor

Calling a task from your application:

Command::run(array('notify'));

Calling a task from your application with arguments:

Command::run(array('notify', 'taylor'));

Remember, you can call specific methods on your task, so, let's add an "urgent" method to the notify task:

Adding a method to the task:

class Notify_Task {

    public function run($arguments)
    {
        // Do awesome notifying…
    }

    public function urgent($arguments)
    {
        // This is urgent!
    }

}

Now we can call our "urgent" method:

Calling a specific method on a task:

php artisan notify:urgent

Bundle Tasks

To create a task for your bundle just prefix the bundle name to the class name of your task. So, if your bundle was named "admin", a task might look like this:

Creating a task class that belongs to a bundle:

class Admin_Generate_Task {

    public function run($arguments)
    {
        // Generate the admin!
    }

}

To run your task just use the usual Laravel double-colon syntax to indicate the bundle:

Running a task belonging to a bundle:

php artisan admin::generate

Running a specific method on a task belonging to a bundle:

php artisan admin::generate:list

CLI Options

Setting the Laravel environment:

php artisan foo --env=local

Setting the default database connection:

php artisan foo --database=sqlite