修复无效的 laravel getXXXAttribute 修饰符
前端问我为什么所有 PHP 参数都带有下划线。感觉很不规则。您可以看到(Java)其他用户命名骆驼屋。
我说我不在乎,php是世界上最好的语言,我强调了这一点。
其实这个问题好像是从入行开始就一直用下划线的,但是我也解释不了为什么。今天我发现这个名字有更好的解释。如果有更清楚的朋友欢迎留言。 1 把它放在相应的模型中:
publicfunctiongetProductDetailAttribute($extra){returnjson_decode($extra,true);}
但是无论我怎么尝试,它就是不起作用。于是我仔细看了源码中的修饰符。
是修饰语的核心。通过定期过滤,当前模型中有多少符合修改器的条件。
protectedstaticfunctiongetMutatorMethods($class){preg_match_all('/(?<=^|;)get([^;]+?)Attribute(;|$)/',implode(';',get_class_methods($class)),$matches);return$matches[1];}
ProductDetai字段匹配,满足修改条件。
接下来我们看到一个非常重要的操作
publicstaticfunctioncacheMutatedAttributes($class){static::$mutatorCache[$class]=collect(static::getMutatorMethods($class))->map(function($match){returnlcfirst(static::$snake```php
publicstaticfunctioncacheMutatedAttributes($class){static::$mutatorCache[$class]=collect(static::getMutatorMethods($class))->map(function($match){returnlcfirst(static::$snakeAttributes? Str::snake($match):$match);})->all();}
```? Str::snake($match):$match);})->all();}
那就是将ProductDetai转换为product_detail
,然后从属性中匹配对应的字段。结果没有找到,所以我们不会使用上面定义的方法。
我屈服了,然后将数据库字段更改为product_detail来解决问题。
这是原因之一:为什么 PHP 在名称中使用下划线?
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。