Además de ser un framework web, CakePHP también ofrece un framework de consola para crear herramientas y aplicaciones de línea de comandos. Las aplicaciones de consola son ideales para gestionar una variedad de tareas de mantenimiento que aprovechan la configuración existente de tu aplicación, modelos, complementos y lógica de dominio.
CakePHP proporciona varias herramientas de consola para interactuar con sus características, como i18n y enrutamiento, lo que te permite inspeccionar tu aplicación y generar archivos relacionados.
La Console CakePHP utiliza un sistema de tipo dispatcher para cargar comandos, analizar sus argumentos e invocar el comando correcto. Aunque los ejemplos a continuación usan bash, el console de CakePHP es compatible con cualquier shell de Unix (*nix) y Windows.
Una aplicación CakePHP tiene un directorio src/Command que contiene sus comandos. También incluye un ejecutable en el directorio bin
$ cd /path/to/app
$ bin/cake
Nota
Para Windows, el comando es bin\cake
(note el backslash)
Ejecutar la console sin argumentos listará todos los comandos disponibles. Tú puedes, de esta manera, ejecutar cualquiera de los comandos listados usando su nombre:
# ejecutar el comando server
bin/cake server
# ejecutar el comando migrations
bin/cake migrations -h
# ejecutar bake (con un prefijo de `plugin`)
bin/cake bake.bake -h
Los comandos de los plugins pueden ser invocados sin un prefijo de plugin si el nombre del
comando no coincide con un comando de la aplicación o del framework. En el caso de que dos plugins
proporcionen un comando con el mismo nombre, el plugin que se ha cargado primero obtendrá el alias corto. Siempre
puedes utilizar el formato plugin.command
para hacer referencia de manera inequívoca a un comando.
Por defecto, CakePHP descubrirá automáticamente todos los comandos en tu aplicación y sus complementos. Puede que
desees reducir el número de comandos expuestos al construir aplicaciones de consola independientes. Puedes utilizar
el método console()
de tu clase Application
para limitar qué comandos se exponen y renombrar los comandos que se exponen:
// en src/Application.php
namespace App;
use App\Command\UserCommand;
use App\Command\VersionCommand;
use Cake\Console\CommandCollection;
use Cake\Http\BaseApplication;
class Application extends BaseApplication
{
public function console(CommandCollection $commands): CommandCollection
{
// Agregar por clase
$commands->add('user', UserCommand::class);
// Agregar instancia
$commands->add('version', new VersionCommand());
return $commands;
}
}
En el ejemplo anterior, los únicos comandos disponibles serían help
, version
y user
.
Revisa la sección Comandos sobre como agregar comandos en los plugins.
Nota
Cuando agregas múltiples comandos que usan la misma clase, el comando help
mostrará la opción más corta.
Hay casos en los cuales querrás renombrar comandos para crear comandos anidados o subcomandos. Mientras que el descubrimiento automático de comandos no hará esto, tu pueds registrar tus comandos para darles el nombre que desees.
Puedes personalizar los nombre de los comandos definiéndolo en tu método console()
:
public function console(CommandCollection $commands): CommandCollection
{
// Agregar comandos anidados (subcomandos)
$commands->add('user dump', UserDumpCommand::class);
$commands->add('user:show', UserShowCommand::class);
// Renombrar un comando completamente
$commands->add('lazer', UserDeleteCommand::class);
return $commands;
}
Cuando utilizas el método console()
en tu aplicación, recuerda llamar
$commands->autoDiscover()
para agregar los comandos de CakePHP, de tu aplicación y
de tus plugins.
Si necesitas renombrar/eliminar cualquier comando disponible, puedes usar el evento Console.buildCommands
en
tu manejador de eventos para modificarlos.
Echa un vistazo al capítulo Objetos de comando sobre como crear tu primer comando. Luego aprende más sobre comandos.
In command-line interface (CLI), specifically your console commands,
env('HTTP_HOST')
and other webbrowser specific environment variables are not
set.
If you generate reports or send emails that make use of Router::url()
those
will contain the default host http://localhost/
and thus resulting in
invalid URLs. In this case you need to specify the domain manually.
You can do that using the Configure value App.fullBaseUrl
from your
bootstrap or config, for example.
For sending emails, you should provide Email class with the host you want to send the email with:
use Cake\Mailer\Email;
$email = new Email();
$email->setDomain('www.example.org');
This asserts that the generated message IDs are valid and fit to the domain the emails are sent from.