2 回答

TA貢獻(xiàn)2003條經(jīng)驗(yàn) 獲得超2個(gè)贊
這種行為應(yīng)該在 Laravel 的文檔中注明,事實(shí)并非如此。如果我是你,我會(huì)提出一個(gè)關(guān)于更新有關(guān)此行為的文檔的問題,并看看會(huì)有什么反應(yīng)。
但事實(shí)上,這是一個(gè)功能,而不是一個(gè)錯(cuò)誤。
PHP 的本質(zhì)在很多方面都是敏感和不敏感的。對(duì)于類和方法;PHP 是不敏感的。
class Contact {
public function media() {
return .. relationship;
}
}
// valid
new CONTACT();
(new contact())->mediA();
// valid reflection
$r = \ReflectionClass('contact');
$r->hasMethod('mediA'); // true
所以這些奇怪的東西都是有效的?,F(xiàn)在到你說的這一點(diǎn):
..從我的角度來看
mEdia
不應(yīng)該被允許。我的關(guān)系函數(shù)名稱是media
,我希望它被這樣使用。
那么你必須這樣寫。你必須這樣做,因?yàn)?Laravel 依賴于它。
PHP 根本無法驗(yàn)證/驗(yàn)證。
Laravel 必須改變編程語言的本質(zhì),其敏感性是通過選擇故意設(shè)計(jì)的。
這里的期望是;您(作為程序員)應(yīng)該了解 PHP 的敏感性,因此在這種情況下,絕對(duì)不需要驗(yàn)證給定的輸入。
驗(yàn)證/驗(yàn)證這樣的事情的開銷將是巨大的并且沒有意義。
$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
從各個(gè)角度來看, 的用法$contacts->with('mediA')是完全有效的。
mediA轉(zhuǎn)換為數(shù)組(本身)時(shí)使用medi_a的事實(shí)Str::snake('mediA')只是您必須處理的 Laravel 的一個(gè)功能。

TA貢獻(xiàn)1777條經(jīng)驗(yàn) 獲得超3個(gè)贊
Laravel 中有這樣的行為。要獲得相同的密鑰“mEdIa” - 您必須添加到media
模型。
public static $snakeAttributes = false;
- 2 回答
- 0 關(guān)注
- 127 瀏覽
添加回答
舉報(bào)