本文主要是介绍不要再打Drush命令了 告诉你Drupal Console強大的地方!,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1. Drupal console简述
drupal console是一个能够生成代码样本与drupal交互并提供命令行接口CLI操作的工具。从重建缓存,到列出路由、服务以及模块。甚至还可以和配置管理进行交互。
2. Drupal console的诞生
一切都始于使Drupal 8更好的想法,每一项伟大的发明/创新都源于一个构想,而Drupal从7过渡到8伴随着对昨天基本操作程序的巨大改变。Jesus和David是Drupal Console项目的发起人,提出了将symfony控制台纳入Drupal核心的想法。将其他symfony组件包含到Drupal核心当中。但最初并没有被Drupal社区广泛接受,接受新的理念通常需要一段时间的市场证明,在几次尝试要求纳入并尝试合作进行不同的drupal项目之后,Jesus和David突然意识到,融合和协作将不会发生。于是在哥斯达黎加Drupal camp午餐时,Jesus和David随便讨论了他们试图将创新引入Drupal和相关项目时遇到的挫败感,而Larry Garfield则吹嘘说“有人需要创建一个包含Symfony Console和代码生成的单独项目” 。这句话催生了今天的Drupal Console项目。
3. Drupal console与Drush的区别
drupal console是面向oop 设计即drupal8含版本以上的模块,而drush除了向下兼容之外,drush9也基于Symfony和POO思想重新设计开发的。实际上这两者区别不大,接下来从源码上解析一下两者:
- Drush的加载过程
- // Set up environment
- $environment = new Environment(Path::getHomeDirectory(), $cwd, $autoloadFile);
- $environment->setConfigFileVariant(Drush::getMajorVersion());
- $environment->setLoader($loader);
- $environment->applyEnvironment();
- // Preflight and run
- $preflight = new Preflight($environment);
- $di = new DependencyInjection();
- $di->desiredHandlers(['errorHandler', 'shutdownHandler']);
- $runtime = new Runtime($preflight, $di);
- $status_code = $runtime->run($_SERVER['argv']);
- 首先是加载当前的站点环境变量
- 把当前环境变量与命令行输入和注入处理器放到当前容器上下文当中
- protected function addDrushServices(ContainerInterface $container, ClassLoader $loader, DrupalFinder $drupalFinder, SiteAliasManager $aliasManager, DrushConfig $config) {
- // Override Robo's logger with our own
- $container->share('logger', 'Drush\Log\Logger')
- ->withArgument('output')
- ->withMethodCall('setLogOutputStyler', ['logStyler']);
- $container->share('loader', $loader);
- $container->share('site.alias.manager', $aliasManager);
- // Fetch the runtime config, where -D et. al. are stored, and
- // add a reference to it to the container.
- $container->share('config.runtime', $config->getContext(ConfigOverlay::PROCESS_CONTEXT));
- // Override Robo's formatter manager with our own
- // @todo not sure that we'll use this. Maybe remove it.
- $container->share('formatterManager', \Drush\Formatters\DrushFormatterManager::class)
- ->withMethodCall('addDefaultFormatters', [])
- ->withMethodCall('addDefaultSimplifiers', []);
- // Add some of our own objects to the container
- $container->share('bootstrap.drupal8', 'Drush\Boot\DrupalBoot8');
- $container->share('bootstrap.manager', 'Drush\Boot\BootstrapManager')
- ->withMethodCall('setDrupalFinder', [$drupalFinder]);
- // TODO: Can we somehow add these via discovery (e.g. backdrop extension?)
- $container->extend('bootstrap.manager')
- ->withMethodCall('add', ['bootstrap.drupal8']);
- $container->share('bootstrap.hook', 'Drush\Boot\BootstrapHook')
- ->withArgument('bootstrap.manager');
- $container->share('tildeExpansion.hook', 'Drush\Runtime\TildeExpansionHook');
- $container->share('process.manager', ProcessManager::class)
- ->withMethodCall('setConfig', ['config'])
- ->withMethodCall('setConfigRuntime', ['config.runtime']);
- $container->share(<
这篇关于不要再打Drush命令了 告诉你Drupal Console強大的地方!的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!