¿Cómo utilizar el CLI de Magento 2?

Tiempo de Lectura ~8 minutos

La curva de aprendizaje de Magento 2 ha resultado más larga de lo que la comunidad esperaba, por las diferencias entre tecnologías y paradigmas utilizadas respecto a sus versiones anteriores. Pero en definitiva, una mejora ENORME es la integración del Command Line Interface (CLI), en español sería, Interfaz de Línea de Comandos.

La interfaz de línea de comandos que viene con Magento 2 son una serie de comandos que ejecutan alguna funcionalidad que antes era solo accesible manualmente a través del admin de Magento o que incluso no existía. Por ejemplo, crear un usuario para el administrador, activar la configuración de mantenimiento de la página, instalar datos de ejemplo, entre otras.

Para conocer la lista de comandos disponibles es necesario que abras tu terminal e ingreses a la ruta de archivos donde tu proyecto fue creado. Ya estando ahí escribe la siguiente línea:

$ php bin/magento

La respuesta tras la ejecución de dicha línea de código es la siguiente:

Magento CLI version 2.2.6

Usage:
  command [options] [arguments]

Options:
  -h, --help            Display this help message
  -q, --quiet           Do not output any message
  -V, --version         Display this application version
      --ansi            Force ANSI output
      --no-ansi         Disable ANSI output
  -n, --no-interaction  Do not ask any interactive question
  -v|vv|vvv, --verbose  Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Available commands:
  help                                     Displays help for a command
  list                                     Lists commands
 admin
  admin:user:create                        Creates an administrator
  admin:user:unlock                        Unlock Admin Account
 app
  app:config:dump                          Create dump of application
  app:config:import                        Import data from shared configuration files to appropriate data storage
  app:config:status                        Checks if config propagation requires update
 cache
  cache:clean                              Cleans cache type(s)
  cache:disable                            Disables cache type(s)
  cache:enable                             Enables cache type(s)
  cache:flush                              Flushes cache storage used by cache type(s)
  cache:status                             Checks cache status
 catalog
  catalog:images:resize                    Creates resized product images
  catalog:product:attributes:cleanup       Removes unused product attributes.
 config
  config:sensitive:set                     Set sensitive configuration values
  config:set                               Change system configuration
  config:show                              Shows configuration value for given path. If path is not specified, all saved values will be shown
 cron
  cron:install                             Generates and installs crontab for current user
  cron:remove                              Removes tasks from crontab
  cron:run                                 Runs jobs by schedule
 customer
  customer:hash:upgrade                    Upgrade customer's hash according to the latest algorithm
 deploy
  deploy:mode:set                          Set application mode.
  deploy:mode:show                         Displays current application mode.
 dev
  dev:di:info                              Provides information on Dependency Injection configuration for the Command.
  dev:profiler:disable                     Disable the profiler.
  dev:profiler:enable                      Enable the profiler.
  dev:query-log:disable                    Disable DB query logging
  dev:query-log:enable                     Enable DB query logging
  dev:source-theme:deploy                  Collects and publishes source files for theme.
  dev:template-hints:disable               Disable frontend template hints. A cache flush might be required.
  dev:template-hints:enable                Enable frontend template hints. A cache flush might be required.
  dev:tests:run                            Runs tests
  dev:urn-catalog:generate                 Generates the catalog of URNs to *.xsd mappings for the IDE to highlight xml.
  dev:xml:convert                          Converts XML file using XSL style sheets
 i18n
  i18n:collect-phrases                     Discovers phrases in the codebase
  i18n:pack                                Saves language package
  i18n:uninstall                           Uninstalls language packages
 indexer
  indexer:info                             Shows allowed Indexers
  indexer:reindex                          Reindexes Data
  indexer:reset                            Resets indexer status to invalid
  indexer:set-dimensions-mode              Set Indexer Dimensions Mode
  indexer:set-mode                         Sets index mode type
  indexer:show-dimensions-mode             Shows Indexer Dimension Mode
  indexer:show-mode                        Shows Index Mode
  indexer:status                           Shows status of Indexer
 info
  info:adminuri                            Displays the Magento Admin URI
  info:backups:list                        Prints list of available backup files
  info:currency:list                       Displays the list of available currencies
  info:dependencies:show-framework         Shows number of dependencies on Magento framework
  info:dependencies:show-modules           Shows number of dependencies between modules
  info:dependencies:show-modules-circular  Shows number of circular dependencies between modules
  info:language:list                       Displays the list of available language locales
  info:timezone:list                       Displays the list of available timezones
 maintenance
  maintenance:allow-ips                    Sets maintenance mode exempt IPs
  maintenance:disable                      Disables maintenance mode
  maintenance:enable                       Enables maintenance mode
  maintenance:status                       Displays maintenance mode status
 module
  module:disable                           Disables specified modules
  module:enable                            Enables specified modules
  module:status                            Displays status of modules
  module:uninstall                         Uninstalls modules installed by composer
 newrelic
  newrelic:create:deploy-marker            Check the deploy queue for entries and create an appropriate deploy marker.
 sampledata
  sampledata:deploy                        Deploy sample data modules
  sampledata:remove                        Remove all sample data packages from composer.json
  sampledata:reset                         Reset all sample data modules for re-installation
 setup
  setup:backup                             Takes backup of Magento Application code base, media and database
  setup:config:set                         Creates or modifies the deployment configuration
  setup:cron:run                           Runs cron job scheduled for setup application
  setup:db-data:upgrade                    Installs and upgrades data in the DB
  setup:db-schema:upgrade                  Installs and upgrades the DB schema
  setup:db:status                          Checks if DB schema or data requires upgrade
  setup:di:compile                         Generates DI configuration and all missing classes that can be auto-generated
  setup:install                            Installs the Magento application
  setup:performance:generate-fixtures      Generates fixtures
  setup:rollback                           Rolls back Magento Application codebase, media and database
  setup:static-content:deploy              Deploys static view files
  setup:store-config:set                   Installs the store configuration. Deprecated since 2.2.0. Use config:set instead
  setup:uninstall                          Uninstalls the Magento application
  setup:upgrade                            Upgrades the Magento application, DB data, and schema
 store
  store:list                               Displays the list of stores
  store:website:list                       Displays the list of websites
 theme
  theme:uninstall                          Uninstalls theme
 varnish
  varnish:vcl:generate                     Generates Varnish VCL and echos it to the command line

En las primeras líneas de este mensaje se observa la versión del CLI que siempre será igual a la versión de Magento que tenemos instalada. Vemos también, la forma en que debemos utilizar cada opción de esta lista. Para enseguida mostrarnos las opciones que tenemos al ejecutar php bin/magento. Por ejemplo, según la lista de opciones, puedes conocer solo la versión del CLI y por lo tanto de tu Magento sin necesidad de ver TODO el mensaje anterior. Esto sería posible ejecutando lo siguiente:

$ php bin/magento -V

Y la respuesta será algo similar a:

Magento CLI version 2.2.6

Lo siguiente es una lista de cada comando disponible, dicha lista puede verse alterada dependiendo de la versión de Magento instalada así como de la distribución, que puede ser Open Source o Enterprides. Así mismo, tú puedes crear un módulo para tener tus propios comandos.

De la lista se puede observar varios puntos interesantes. Primero hay dos comandos listados que son help y list. Estos comandos podrias tomarlos como generales ya que pueden interactuar con todos los demás. Por ejemplo, ejecutando:

$ php bin/magento help list

El script mostraría la siguiente respuesta:

Usage:
  list [options] [--] [<namespace>]

Arguments:
  namespace            The namespace name

Options:
      --xml            To output list as XML
      --raw            To output raw command list
      --format=FORMAT  The output format (txt, xml, json, or md) [default: "txt"]

Help:
  The list command lists all commands:

    php bin/magento list

  You can also display the commands for a specific namespace:

    php bin/magento list test

  You can also output the information in other formats by using the --format option:

    php bin/magento list --format=xml

  It is also possible to get raw list of commands (useful for embedding command runner):

    php bin/magento list --raw

Lo que pasa con este comando y su respuesta es lo siguiente, le estas diciendo al comando help que te explique como utilizar el comando list, a lo que responde con la forma de utilizarlo, sus opciones y argumentos válidos y diferentes ejemplos de uso para una mejor interpretación.

El comando list funciona de forma muy similar, sin embargo, puedes diferenciar que el comando help funciona para instrucciones o comandos finales, es decir aquellos que ya ejecutan una acción, mientras que list trabaja con los grupos o conjuntos de comandos. Por ejemplo si ejecutas solo php bin/magento list verías el mismo resultado obtenido de ejecutar php bin/magento.

Ahora, identificando los grupos de códigos disponibles en una instalación default de Magento 2 puedes notar que son:

  • admin
  • app
  • cache
  • catalog
  • config
  • cron
  • customer
  • deploy
  • dev
  • i18n
  • indexer
  • info
  • maintenance
  • module
  • newrelic
  • sampledata
  • setup
  • store
  • theme
  • varnish

Claro, esta lista de grupos puede tener más o menos opciones dependiendo nuevamente de la versión. Estos grupos puedes diferenciarlos en la lista de arriba pues tienen diferente identación que el resto de la lista, separando así las agrupaciones de los comandos disponibles.

Con la práctica y el desarrollo de muchos proyectos en Magento 2 estas agrupaciones te seran muy familiares y utilizando los comandos list y help podrás hacer un uso adecuado de cada comando. Por ejemplo, utiliza el comando list para saber que comandos tienes disponibles en el grupo admin, escribe en tu terminal:

$ php bin/magento list admin

La respuesta, además de indicarte la forma de uso y opciones disponibles lista los comandos disponibles para la palabra clave “admin”, en este caso admin:user:create y admin:user:unlock los cuales son útiles para crear y desbloquear un usario del administrador de Magento 2 respectivamente.

Ahora, puedes ejecutar el comando help para alguno de esos comandos disponibles y saber cuáles son los argumentos y opciones disponibles. Por ejemplo, la respuesta tras ejecutar php bin/magento help admin:user:create será:

Usage:
  admin:user:create [options]

Options:
      --admin-user=ADMIN-USER                    (Required) Admin user
      --admin-password=ADMIN-PASSWORD            (Required) Admin password
      --admin-email=ADMIN-EMAIL                  (Required) Admin email
      --admin-firstname=ADMIN-FIRSTNAME          (Required) Admin first name
      --admin-lastname=ADMIN-LASTNAME            (Required) Admin last name
      --magento-init-params=MAGENTO-INIT-PARAMS  Add to any command to customize Magento initialization parameters
                                                 For example: "MAGE_MODE=developer&MAGE_DIRS[base][path]=/var/www/example.com&MAGE_DIRS[cache][path]=/var/tmp/cache"
  -h, --help                                     Display this help message
  -q, --quiet                                    Do not output any message
  -V, --version                                  Display this application version
      --ansi                                     Force ANSI output
      --no-ansi                                  Disable ANSI output
  -n, --no-interaction                           Do not ask any interactive question
  -v|vv|vvv, --verbose                           Increase the verbosity of messages: 1 for normal output, 2 for more verbose output and 3 for debug

Help:
  Creates an administrator

Puedes notar que dentro del menú Options los primeros cinco parámetros tienen la leyenda Required, lo cual quiere decir que al momento de ejecutar el comando admin:user:create son obligatorios. En este caso si no ingresas tú los campos requeridos Magento 2 en tu misma terminal te preguntará por ellos.

Los comandos auxiliares help y list los puedes utilizar con todos los comandos y grupos respecitivamente de la misma forma en que los utilizaste con los ejemplos de este blog. De ese modo te será más fácil y simple poder interactuar desde la terminal con tu ecommerce en Magento 2.

Conclusiones

Ahora ya tienes una visión general del uso y los alcances del CLI que viene integrado en Magento 2. Utilizar estos comandos te serán indispensables para trabajar con tu ecommerce. Aún cuando tu no seas un desarrollador backend o frontend, puede que seas el project manager y estes actualizando el catálogo de productos, seguro vas a pedir que reindexen el sitio y adivina que, ese proceso es posible únicamente con la interfaz de línea de comandos.

¿Te gustaría aprender sobre como utilizar cada uno de los comandos? ¿Quieres aprender a crear tus propios comandos? Seguramente en otros artículos crearemos un módulo con nuestro propio comando disponible a través de la terminal.

Nuevamente te invito a compartir este artículo y dejar algún comentario. Si tienes dudas estoy dispuesto a resolverlas. La idea principal de tener este blog es compartir de forma que todos conozcamos algo del día a día de un trabajo como programador o en el área del comercio electrónico.

El trabajo perfecto NO existe

Sin querer desilucionar a nadie, la realidad es que el trabajo perfecto NO EXISTE, pero mi objetivo, no es desanimarte sino todo lo contario. Todos los trabajos tienen sus áreas de oportunidad para mejorar y eres una pieza fundamental para que el empleo que tienes sea PERFECTO para tí.

¿Cómo perder el MIEDO a comprar en línea?

Publicado el 30 de Enero del 2019