/eecli

Command line interface for ExpressionEngine

Primary LanguagePHP

eecli

Command line interface for ExpressionEngine

Installation

composer global require eecli/eecli dev-master

Make sure your global composer installation is added to your PATH in your ~/.bash_profile (or ~/.profile or ~/.bashrc or ~/.zshrc) so that you may run the binary from the command line:

export PATH=~/.composer/vendor/bin:$PATH

You can also install this locally:

composer require eecli/eecli dev-master

Then the command would be found in your vendor/bin folder, so you'd run this at your command line:

vendor/bin/eecli <your command>

Configuration

Run eecli init to create a .eecli.php config file in the current working directory.

Open .eecli.php and follow the instructions found in the file's comments to configure your EE setup.

If your system folder is the default system and is in the current working directory, you may not need a config file.

You will receive a warning message if your system folder cannot be found.

Commands

Help

Display information about a command and its arguments/options.

eecli help <command>

List

List the available commands.

eecli list

Generate Command

Generate a custom command file. Specify the command name as the first argument.

# generates a file called YourCustomCommand in the current directory
eecli generate:command your:custom_comand

# generates in the specified directory
eecli generate:command your:custom_comand ./commands/

# generates with a namespace
eecli generate:command --namespace="YourSite\Command" your:custom_comand ./src/YourSite/Command/

# generates with arguments and options
eecli generate:command --has-options --has-arguments your_command

# generates with a description
eecli generate:command --description="Clear custom cache" cache:clear:custom

Generate .htaccess

Generate the official EE .htaccess file (as found in the EE documentation).

# generates in the current directory
eecli generate:htaccess

Generate Addon(s)

Generate an addon using a wizard interface.

eecli generate:addon

Screencast of addon generation

Clear EE Cache

Clears the native EE cache(s).

# clear all EE caches
eecli cache:clear:ee

# clear EE page caches
eecli cache:clear:ee page

# clear EE db caches
eecli cache:clear:ee db

# clear EE tag caches
eecli cache:clear:ee tag

Clear Stash Cache

Clears the entire Stash cache by truncating the exp_stash table.

eecli cache:clear:stash

Clear CE Cache

Clears CE Cache.

# clear all CE Cache drivers
eecli cache:clear:ce_cache

# clear specific CE Cache items
eecli cache:clear:ce_cache local/blog/detail/foo local/blog/detail/bar

# clear specific CE Cache tags
eecli cache:clear:ce_cache --tags foo bar

Run Addon Updates

This checks if any of your addons (modules, extensions, and fieldtypes) are out of date by comparing version numbers in your database with version numbers in your addon files. If so, it will run the addon's update method. This is exactly how addon updates work inside the control panel.

# run all addon updates
eecli update:addons

# run module updates
eecli update:addons modules

# run extension updates
eecli update:addons extensions

# run fieldtype updates
eecli update:addons fieldtypes

# run accessory updates
eecli update:addons accessories

DB Dump

Dump your database using mysqldump. NOTE: your PHP installation must be able to call mysqldump via the PHP system function. If you have an ENV or ENVIRONMENT constant defined in your config.php, that name will be used in the sql dump file name.

# create a sql dump file in the current folder
eecli db:dump

# create a sql dump file in the specified folder
eecli db:dump backups/

# create a sql dump file, gzipped
eecli db:dump --gzip

# create a sql dump file, keep the last X backups and delete the rest
eecli db:dump --backups=10 --gzip backups/

REPL

eecli repl

Starts an interactive shell.

Create Channel

Creates an ExpressionEngine channel. Pass in a channel short name using underscores only and optionally pass in a channel title. If you exclude the channel title, one will be auto-generated from your channel short name.

# create a channel with the short name test_channel
eecli create:channel test_channel

# create a channel with the title Test Channel
eecli create:channel test_channel "Test Channel"

# create a channel with field group 5
eecli create:channel --field_group=5 test_channel

# create a channel with status group 5
eecli create:channel --status_group=5 test_channel

# create a channel with cat group 5 and 6
eecli create:channel --cat_group="5|6" test_channel

Synchronize Templates

Synchronize the template database with your template files.

eecli sync:templates

Show Config

Show config items.

# Show all config items in a table
eecli show:config

# Show the specified config item
eecil show:config <key>

Github Addon Installer

If you have Github Addon Installer installed, you can use the install:addon command.

eecli install:addon

This will prompt you to enter an addon name. Start typing to trigger autocomplete.

You may also simply specify the addon name in the command. You can specify a branch as the second argument.

eecli install low_replace
eecli install stash dev

Third Party Commands

ExpressionEngine addons can add custom commands to eecli using the eecli_add_commands hook:

public function eecli_add_commands($commands, $app)
{
    if (ee()->extensions->last_call !== FALSE)
    {
        $commands = ee()->extensions->last_call;
    }

    require_once PATH_THIRD.'my_addon/src/MyCustomCommand.php';

    $commands[] = new MyCustomCommand();

    return $commands;
}

Autocompletion

If you use Oh My ZSH, you can install the eecli ZSH autocompletion plugin.

Custom Commands

eecli custom commands are Laravel Console Command objects, which extend Symfony Console Command objects. You can add custom commands to your .eecli.php config file by adding the class name to the 'commands' array.

You can generate a custom command file using the eecli generate:command command.

If your command does not require that EE be bootstrapped to run, you should simply implement the eecli\Command\ExemptFromBootstrapInterface, which has no additional methods.

Here is a simple example custom command (it is assumed your custom command classes are in your autoloader):

<?php

namespace MyApp\Command;

use Illuminate\Console\Command;

class RemoveBannedMembersCommand extends Command
{
    protected $name = 'remove_banned_members';
    protected $description = 'Removes members that are banned.';

    protected function fire()
    {
        ee()->db->delete('members', array('group_id' => 2));

        $this->info('Banned members removed.');
    }
}

And your configuration would be:

'commands' => array(
    '\\MyApp\\Command\\RemoveBannedMembersCommand',
),

Then you could run this do remove banned members, in a cron job for instance.

eecli remove_banned_members

You may also use a callback to instantiate your object, useful if you need to inject dependencies.

'commands' => [
    function ($app) {
        return new CustomCacheClearingCommand(new RedisClient);
    },
],

Contributing

Please send pull requests to the develop branch. Please be sure to follow the PSR-1 coding standard and the PSR-2 style guide.

Command Wishlist

These commands yet to be implemented. Pull requests welcome.

  • create:category
  • create:category_group
  • create:template
  • create:template_group
  • create:member
  • create:member_group
  • create:field
  • create:field_group
  • create:global_variable
  • create:snippet
  • create:low_variable
  • sync:fields
  • sync:snippets
  • sync:global_variables