Laravel项目适配驼峰命名的合法变量名嗅探工具推荐请求
解决PHP_CodeSniffer误标Laravel模型蛇形属性的问题
你遇到的问题很典型——Zend和Squiz的ValidVariableNameSniff会把Eloquent模型里的蛇形属性(比如$user->first_name)判定为不符合驼峰命名规范,但这类属性对应数据库的蛇形字段,完全是合法用法。下面给你几个实用的解决办法:
方法一:换用Laravel专属的代码规范工具
直接用Laravel Pint就完事了,它底层基于PHP_CodeSniffer和PHP-CS-Fixer,专门适配Laravel项目,默认就不会把模型的蛇形属性当成错误。
- 安装:在项目根目录跑命令
composer require laravel/pint --dev - 检查代码问题:
./vendor/bin/pint --test - 自动修复不符合规范的代码:
./vendor/bin/pint
方法二:修改现有嗅探的配置规则
如果不想换工具,就自己改phpcs.xml配置,让嗅探忽略对象属性的蛇形命名检查:
- 在项目根目录创建
phpcs.xml文件 - 把下面的配置粘进去(如果用的是Squiz标准,就把所有
Zend换成Squiz):<?xml version="1.0"?> <ruleset name="Laravel Custom"> <!-- 引入你原本用的标准 --> <rule ref="Zend"/> <!-- 禁用原始的全局变量命名检查 --> <rule ref="Zend.NamingConventions.ValidVariableName"> <exclude-pattern>*.php</exclude-pattern> </rule> <!-- 保留私有/受保护变量的驼峰要求 --> <rule ref="Zend.NamingConventions.ValidVariableName.NotPublic"> <properties> <property name="allowUnderscores" value="false"/> </properties> </rule> <!-- 允许对象的蛇形属性 --> <rule ref="Zend.NamingConventions.ValidVariableName.PropertyNotSnakeCase"> <exclude-pattern>*.php</exclude-pattern> </rule> </ruleset>
方法三:用PHP-CS-Fixer搭配使用
PHP-CS-Fixer对Laravel的适配性更好,可以和PHP_CodeSniffer一起用:
- 安装依赖:
composer require friendsofphp/php-cs-fixer --dev - 创建
.php-cs-fixer.dist.php配置文件,添加Laravel规则:<?php $finder = PhpCsFixer\Finder::create() ->in(__DIR__) ->exclude('vendor'); return (new PhpCsFixer\Config()) ->setRules([ '@Laravel' => true, 'variable_name' => ['case' => 'camel_case'], // 允许对象属性用蛇形命名 'object_property_notation' => true, ]) ->setFinder($finder); - 检查代码:
./vendor/bin/php-cs-fixer fix --dry-run
内容的提问来源于stack exchange,提问作者Pankaj Agrawal
相关产品推荐
相关产品推荐

