ekino / drupal-debug
为Drupal 8提供替代调试内核,以改善开发者体验。
Requires
- php: >=7.1
- composer-plugin-api: ^1.1
- drupal/core: ^8.6
- monolog/monolog: ^1.3
- nesbot/carbon: ^1.24
- symfony/config: ^3.4 || >=4.0 <4.3
- symfony/console: ^3.4 || ^4.0
- symfony/debug: ^3.4.22 || ^4.1.11 || ^4.2.3
- symfony/dependency-injection: ^3.4 || ^4.0
- symfony/event-dispatcher: ^3.4 || ^4.0
- symfony/filesystem: ^3.4 || ^4.0
- symfony/http-foundation: ^3.4 || ^4.0
- symfony/http-kernel: ^3.4 || ^4.0
- symfony/polyfill-php70: ^1.0
- symfony/property-access: ^3.4 || ^4.0
- symfony/var-dumper: ^3.4 || ^4.0
- symfony/yaml: ^3.4 || ^4.0
Requires (Dev)
- composer/composer: ^1.7
- drupal-composer/drupal-scaffold: ^2.5
- drush/drush: ^9.0
- fabpot/goutte: ^3.2.3
- friendsofphp/php-cs-fixer: ^2.14
- guzzlehttp/guzzle: ^6.3
- phpstan/phpstan: ^0.10
- phpstan/phpstan-phpunit: ^0.10
- phpunit/phpunit: ^7.5
- symfony/browser-kit: ^3.4 || ^4.0
- symfony/finder: ^3.4 || ^4.0
- symfony/panther: dev-master#f76f91e94c1f29117963d8625f47462a930a03e2
- symfony/process: ^3.4.2 || ^4.0.2
This package is auto-updated.
Last update: 2024-09-05 00:28:45 UTC
README
此库提供Drupal 8的替代内核,以改善开发过程中的开发者体验。
此调试内核扩展(但默认完全替换)原始Drupal内核,以改变一些内部Drupal行为。这样做的原因是:帮助您更好地、更快地开发!
一旦安装此库,您将在开发过程中体验到“调试模式”。例如,当您添加或删除自定义服务、路由或模块钩子实现时,您不再需要手动清除缓存。
要求
此库要求您的Drupal项目使用Composer。如果不是这样,您可以通过例如此Composer模板进行检查。
它仅支持最新发布的Drupal次要版本。
它仅支持当前支持的PHP版本。
安装
将此库作为开发依赖项要求。
composer require ekino/drupal-debug --dev
它必须仅作为开发依赖项安装。您不希望在生产中使用它!
操作
此库使用“操作”。操作有一个独特的目标,可以改善您使用Drupal的开发体验。
目前,所有操作都是启用和强制性的,但计划逐步将其中的大多数设置为可选。
此外,您目前还不能提供自己的自定义操作,但这也是未来的计划。
以下是当前可用的操作列表以及它们如何帮助您
更多即将到来!
配置
一些操作可以通过选项进行配置,这些选项可以在专用配置文件中设置。然而,此配置文件不是必需的,因为每个选项都有一个默认值,如果未显式定义,则将其解决。
目前,这些选项不能独立于每个操作(使用此文件)进行配置,但这当然也是计划中的。可配置的是重复使用的选项的默认值。如果您想为每个操作指定选项,您必须手动使用调试内核。
以下是默认配置文件内容(即如果配置文件不存在或键未定义,则为默认解决的配置)
# This is the drupal-debug configuration file. drupal-debug: # The defaults values are common values that are reused by different actions. defaults: cache_directory_path: cache logger: enabled: true channel: drupal-debug file_path: logs/drupal-debug.log charset: null file_link_format: null # It is recommended to disable the original Drupal Kernel substitution to run your tests. # To programmatically toggle it, use the two dedicated composer commands. substitute_original_drupal_kernel: enabled: true composer_autoload_file_path: vendor/autoload.php # If not specified, it fall backs to the default cache directory path. cache_directory_path: null
默认情况下,此配置文件的位于项目根目录(Composer vendor目录的父目录)。但它可以通过DRUPAL_DEBUG_CONFIGURATION_FILE_PATH
环境变量定义。
为了性能,解决后的配置被缓存。默认情况下,此缓存的位于系统临时目录。但它可以通过DRUPAL_DEBUG_CONFIGURATION_CACHE_DIRECTORY_PATH
环境变量定义。
以下是所有具有选项的操作列表
显示漂亮的异常
- charset:异常页面的字符集。
- fileLinkFormat:用于创建到您的IDE的链接的文件链接格式。
- logger:用于记录异常的
LoggerInterface
实例。
尽快显示漂亮的异常
- charset:异常页面的字符集。
- fileLinkFormat:用于创建到您的IDE的链接的文件链接格式。
将错误抛出为异常
- levels:必需。抛出错误的E_*常量的位字段。
- logger: 一个用于记录错误的
LoggerInterface
实例。
监控容器定义
- cacheFilePath: 必需。缓存的容器定义文件的存储位置。
- resourcesCollection: 必需。一个
ResourcesCollection
实例(要监控的资源)。
监控模块钩子实现
- cacheFilePath: 必需。缓存的模块钩子实现文件的存储位置。
- resourcesCollection: 必需。一个
ResourcesCollection
实例(要监控的资源)。
监控路由定义
- cacheFilePath: 必需。缓存的路由文件的存储位置。
- resourcesCollection: 必需。一个
ResourcesCollection
实例(要监控的资源)。
Composer 命令
以下是提供的Composer命令列表,这些命令可以帮助您管理配置文件
原始 Drupal 内核替换
具体替换原始 Drupal 内核意味着,每当在Composer自动加载文件被加载后,使用到 DrupalKernel
类的地方,实际上使用的是这个库中的 DebugKernel
类,尽管外表看起来不是这样!
这很好,因为任何与 Drupal 交互的第三方库(例如 drush
)将自动使用调试内核。
然而,它可能导致一些不期望的行为,特别是在这个库的WIP阶段。这就是为什么你在运行测试等情况下不应该使用原始 Drupal 内核替换。仅用于开发部分!
手动使用调试内核
您可以直接在您的入口控制器(通常是在您的公开目录中的 index.php
文件)中使用调试内核来指定每个操作的选项。这也是在禁用原始 Drupal 内核替换的情况下使用调试内核的解决方案。
您只需要使用 OptionsStackBuilder
辅助类来构建一个 OptionsStack
实例,并将其传递给 DebugKernel
构造函数。
在选项堆栈中手动设置选项将覆盖配置中定义的默认值(如果存在)。
以下是一个示例用法
<?php /** * @file * The PHP page that serves all page requests on a Drupal installation. * * All Drupal code is released under the GNU General Public License. * See COPYRIGHT.txt and LICENSE.txt files in the "core" directory. */ use Ekino\Drupal\Debug\Kernel\DebugKernel; use Ekino\Drupal\Debug\Option\OptionsStackBuilder; use Ekino\Drupal\Debug\Resource\Model\ResourcesCollection; use Symfony\Component\Config\Resource\FileResource; use Symfony\Component\HttpFoundation\Request; $optionsStack = OptionsStackBuilder::create() ->setDisplayPrettyExceptionsOptions('utf-8', 'phpstorm://open?file=%%f&line=%%l', NULL) ->setWatchContainerDefinitionsOptions('/tmp/container_definition.php', new ResourcesCollection([ new FileResource('/var/www/my_drupal_project/web/modules/custom_module/custom_module.services.yml'), ])) ->getOptionsStack(); $autoloader = require_once 'autoload.php'; $kernel = new DebugKernel('prod', $autoloader, TRUE, NULL, $optionsStack); $request = Request::createFromGlobals(); $response = $kernel->handle($request); $response->send(); $kernel->terminate($request, $response);