2 回答
TA贡献2003条经验 获得超2个赞
这种行为应该在 Laravel 的文档中注明,事实并非如此。如果我是你,我会提出一个关于更新有关此行为的文档的问题,并看看会有什么反应。
但事实上,这是一个功能,而不是一个错误。
PHP 的本质在很多方面都是敏感和不敏感的。对于类和方法;PHP 是不敏感的。
class Contact {
public function media() {
return .. relationship;
}
}
// valid
new CONTACT();
(new contact())->mediA();
// valid reflection
$r = \ReflectionClass('contact');
$r->hasMethod('mediA'); // true
所以这些奇怪的东西都是有效的。现在到你说的这一点:
..从我的角度来看
mEdia
不应该被允许。我的关系函数名称是media
,我希望它被这样使用。
那么你必须这样写。你必须这样做,因为 Laravel 依赖于它。
PHP 根本无法验证/验证。
Laravel 必须改变编程语言的本质,其敏感性是通过选择故意设计的。
这里的期望是;您(作为程序员)应该了解 PHP 的敏感性,因此在这种情况下,绝对不需要验证给定的输入。
验证/验证这样的事情的开销将是巨大的并且没有意义。
$class = 'contact';
$method = 'mediA';
$r = new \ReflectionClass($class);
if($class !== $r->getName()) {
throw new \Exception('unknown class');
}
if(!in_array($method, array_map(function($method) {
return $method->name;
}, $methods))) {
throw new \Exception('unknown method');
}
// valid from here
从各个角度来看, 的用法$contacts->with('mediA')是完全有效的。
mediA转换为数组(本身)时使用medi_a的事实Str::snake('mediA')只是您必须处理的 Laravel 的一个功能。
TA贡献1777条经验 获得超3个赞
Laravel 中有这样的行为。要获得相同的密钥“mEdIa” - 您必须添加到media
模型。
public static $snakeAttributes = false;
- 2 回答
- 0 关注
- 95 浏览
添加回答
举报