index.md 2.8 KB


layout: default title: Output

permalink: /output/

Output

Prior to 3.0, it was a bit cumbersome to add different writers to CLImate. Starting with 3.0, you have more flexibility and options when it comes to output.

Available Writers

Out of the box, CLImate comes with three writers:

  • out -> STDOUT (default)
  • error -> STDERR
  • buffer -> string buffer

Output Once Using a Writer

You can easily write to another output for just a single line:

$climate->to('error')->red('Something went terribly wrong.');

Setting the Default Writer

Setting the default writer is simple:

$climate->output->defaultTo('error');

You can also simply add a default writer instead of replacing all of them using addDefault:

$climate->output->addDefault('buffer');

Registering a Custom Writer

All writers must implement League\CLImate\Util\Writer\WriterInterface. To register your writer:

$climate->output->add('logger', new LogWriter());

The first parameter is a key that you can reference the writer by. Now you can set it as a default or output with it for one line:

$climate->to('logger')->out('Logging this right.... now.');
$climate->output->defaultTo('logger');

Multiple Writers at Once

The following methods accept multiple writers: to, defaultTo, addDefault, add.

So, for example, if you want to write everything to STDOUT and also log it at the same time, you can.

All you need to do is pass an array instead:

// Write once to multiple
$climate->to(['error', 'buffer'])->red('Something went terribly wrong.');

// Write every time to multiple
$climate->defaultTo(['error', 'buffer']);
$climate->addDefault(['error', 'buffer']);

// Add two custom writers accessible by one key
$climate->add('combo', [new LogWriter(), new TotallyCustomWriter()]);

// Add a combo of two already registered writers
$climate->add('another-combo', ['out', 'error']);

Accessing Registered Writers

To access a registered writer, use the get method:

$climate->output->get('buffer');

If the key correlates with a single writer class, that class will be returned to you. Otherwise, the array of writer classes will be returned.

So for buffer, you have access to the following:

// Get the current contents of the buffer string
$climate->output->get('buffer')->get();

// Clean the buffer and throw away the contents
$climate->output->get('buffer')->clean();

Getting Available Writers

You can see the writers available to you using the getAvailable method:

$climate->output->getAvailable();

// [
//    'out'    => 'League\CLImate\Util\Writer\StdOut',
//    'error'  => 'League\CLImate\Util\Writer\StdErr',
//    'buffer' => 'League\CLImate\Util\Writer\Buffer',
// ]