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 關注
- 130 瀏覽
添加回答
舉報