如何不安装Devel模块为Drupal全局安装Kint(解决Lando适配问题)
问题原因
原生本地部署的Drupal直接运行在宿主机系统上,能正常读取宿主机用户目录下的Composer全局文件;但Lando是基于容器的隔离运行环境,默认不会挂载宿主机的/home/username/.composer目录到应用容器内部,你写的include_once路径在容器内不存在,自然无法加载Kint。
无Devel模块全局Kint配置步骤(适配Lando环境)
- 第一步:进入Lando项目的应用容器
在项目根目录执行命令进入运行PHP的appserver容器:lando ssh - 第二步:容器内安装全局Kint
容器内执行以下命令,配置全局Composer路径(避免www-data用户权限问题)并安装Kint:
安装完成后执行composer config -g vendor-dir /var/www/.composer/vendor composer config -g bin-dir /var/www/.composer/vendor/bin composer global require kint-php/kintls /var/www/.composer/vendor/autoload.php,如果返回文件路径说明安装正常。 - 第三步:持久化全局依赖配置
容器默认重建后会清空内部文件,需要在项目根目录的.lando.yml中添加挂载配置,把全局Composer目录持久化存储:
保存配置后执行# 文件顶层添加volume声明 volumes: lando_composer_global: services: appserver: # 在appserver服务下添加挂载规则 volumes: - lando_composer_global:/var/www/.composerlando rebuild -y重建环境,重建完成后重新执行第二步的Kint安装命令,后续容器重启/重建都不会丢失全局依赖。如果你需要所有本地Lando项目都能共用这套全局Kint,把上述volume配置写到Lando全局配置文件
~/.lando/config.yml中即可,无需每个项目重复配置。 - 第四步:配置Drupal自动加载
打开站点的settings.local.php,替换原来的宿主机路径引入代码为容器内路径,建议加文件存在判断避免报错:// 加载容器内全局Composer自动加载 if (file_exists('/var/www/.composer/vendor/autoload.php')) { include_once('/var/www/.composer/vendor/autoload.php'); } // 可选Kint基础配置,避免大变量渲染导致站点卡顿 if (class_exists('Kint')) { // 限制递归深度,默认值过深容易内存溢出 \Kint::$depth_limit = 4; // 非管理员用户访问时关闭Kint输出,避免调试信息泄露 if (!\Drupal::currentUser()->hasPermission('administer site configuration')) { \Kint::$enabled_mode = false; } }
验证方式
执行lando drush cr清除Drupal缓存,在模块预处理函数、模板文件中直接调用Kint函数即可输出调试内容,常用调用方式:
- 直接输出变量:
kint($变量名); - 带标签输出:
kint($变量名, '自定义调试标签'); - 不中断程序执行的静默dump:
$debug = @Kint::dump($变量名);
内容的提问来源于stack exchange,提问作者Adharsh M
相关产品推荐
相关产品推荐

