Problém
Snažil som sa z modelu získať výmluvný model, ale stále sa do toho dostávam BadMethodCallExceptionMethod [nájsť]
neexistuje.
Tu som sa zatiaľ snažil:
aplikácia namespace;použite Illuminate \ Database \ Eloquent \ Model;
používať aplikáciu \ organizácia;
trieda Používateľ rozširuje Model
/ **
* Databázová tabuľka používaná modelom.
*
* @var reťazec
* /
protected $ table = 'users';
/ **
* Atribúty vylúčené z formulára JSON modelu.
*
* @var pole
* /
chránený $ skrytý = pole ('heslo');
verejné funkčné organizácie ()
vrátiť $ this-> patříToMany (Organizácia :: trieda);
Toto je základná trieda používateľov, ktorá je súčasťou každého nového projektu Laravel. Po vytvorení nového používateľa jasne vidím, že v databáze existuje používateľ s ID3. Keď však urobím nasledovné, nakoniec skončím s Metóda BadMethodCallException [nájsť] neexistuje
verejná funkcia getUser ($ id)
$ my_user = Užívateľ :: nájsť ($ id);
spätné zobrazenie („používatelia.index ', array (' user '=> $ my_user));
Trasy súborov My Routes \ web.php:
Route :: get ('user / id', '[email protected]');Route :: get ('/', function ()
return View :: make ('test');
);
Riešenie
S touto implementáciou sa môže stretnúť niekoľko problémov, ktoré môžu spôsobiť, že sa vám zobrazí Metóda BadMethodCallException [nájsť] neexistuje
výnimkou.
- Mali by ste postupovať podľa osvedčených postupov pri pomenovávaní svojich ovládačov ako svojho slova Model + „Ovládač“, aby ste namiesto User dostali nakoniec UserController .
- Trieda User, na ktorú tu odkazujete, v skutočnosti nesúvisí s vaším modelom App \ User. Ak si to všimnete, nikdy ste výslovne nezahrnuli svoj model. Takže za predpokladu, že ste už opravili predchádzajúci bod, budete musieť do svojho UserController zahrnúť triedu User . Iba potom môžete pomocou tejto triedy vytvárať nové objekty. Takže do svojho UserController choďte a pridajte použitie App \ User; na vrchu. (Všimnite si, ako som zahrnul aplikáciu \ organizácia)
- Keď to napravíte, mali by ste spustiť výpis skladateľa -o na regeneráciu skladateľa.zamknite súbor, ktorý pomôže urýchliť načítanie vašich tried.
Potom by ste mali mať prístup k svojmu modelu App \ User tak, ako ste zamýšľali.
Ďalšie vysvetlenie (iba na vzdelávacie účely)
Ako viete, vývoj webových aplikácií nikdy nemal byť šou jedného človeka. Všeobecne môžete očakávať, že budete s ostatnými vývojármi spolupracovať asi 90% času. Aby bol projekt úspešný, musíte sa ubezpečiť, že všetci dodržiavajú všeobecné pravidlá kódovania.
Jedno z pravidiel sa bude týkať konvencií o pomenovaní a chápem, že dodržiavanie definitívnej konvencie pomenovania si vyžaduje veľa úsilia a môže potenciálne stratiť veľa času tímu, kým ich každý pochopí a nebude ich dodržiavať. Je to obzvlášť ťažké pre nových vývojárov, ktorí sa k tímu pridajú.
Navrhujem, aby ste sa pokúsili prečítať viac kódu iných ľudí skôr, ako začnete písať svoj kód, len aby ste získali predstavu o najlepších postupoch v odbore.
Niektoré pravidlá sú povinné a niektoré sú ponechané na tím, aby rozhodol, ako chce pristúpiť.
Pri pohľade na problém zhora si všimnete, že všetky triedy by mali byť písané v StudlyCaps, takže UserController a nie user_controller .
A toto je príklad povinného pravidla, ktorým sa treba riadiť.
Príkladom toho, čo by ste ako tím mohli definovať ako svoje interné pravidlo, je príklad, ako pomenujete svoje triedy, metódy a premenné.
Ak sa očakáva, že projekt časom porastie, určite môžete očakávať veľa rôznych entít, ktoré tak či onak zahŕňajú používateľa, takže je dôležité, aby ste pre svoje triedy, metódy a premenné neprichádzali s neurčitými názvami.
Môj osobný tip je; nebojte sa mať dlhšiu triedu alebo názov metódy. Ak potrebujete komentár, ktorý vysvetľuje vašu metódu, názov vašej metódy môže byť pravdepodobne lepší.
Príkladom toho je, že ak potrebujete získať používateľov z databázy s nejakými ďalšími podmienkami, možno sú to používatelia starší ako 50 rokov, nepomenujte svoju metódu getUsers . Lepší spôsob, ako to pomenovať, je getAllUsersOver50YearsOld .