Il metodo di cattivadcallossimento di Laravel [find] non esiste

Il metodo di cattivadcallossimento di Laravel [find] non esiste

Problema

Ho cercato di ottenere un modello eloquente dal database ma continua a entrare BadMethodCallexceptionMethod [Trova] non esiste.

Ecco cosa ho provato finora:

app spazio dei nomi;
Usa illuminate \ database \ eloquent \ modello;
Usa l'app \ Organization;
L'utente di classe estende il modello
/**
* La tabella del database utilizzata dal modello.
*
* stringa @var
*/
protetto $ table = 'utenti';
/**
* Gli attributi esclusi dalla forma JSON del modello.
*
* Array @var
*/
protetto $ nascosto = array ('password');
Organizzazioni di funzioni pubbliche ()

return $ this-> Beli Belivesmany (Organizzazione :: Class);

Questa è una classe utente di base che viene fornita con ogni nuovo progetto Laravel. Dopo aver creato un nuovo utente, posso vedere chiaramente che l'utente con ID3 esiste nel database. Tuttavia, quando faccio quanto segue, finisco con il Il metodo di cattivadcalcezione [find] non esiste

L'utente di classe estende BaseController
funzione pubblica getUser ($ id)

$ my_user = utente :: find ($ id);
return View ('utenti.indice ', array (' utente '=> $ my_user));

I miei percorsi percorsi file \ web.PHP:

Route :: get ('user/id', 'user@getuser');
Route :: get ('/', function ()

return view :: make ('test');
);

Soluzione

Ci sono alcuni problemi con questa implementazione che potrebbero farti ricevere Il metodo di cattivadcalcezione [find] non esiste eccezione.

  • Dovresti seguire le migliori pratiche nel denominare i tuoi controller come il tuo modello + parola "controller" in modo da finire con un uSerController anziché solo l'utente .
  • La classe utente a cui ti riferisci qui non è effettivamente correlata al modello di app \ utente. Se lo noti, non hai mai incluso esplicitamente il tuo modello. Quindi, supponendo che tu abbia già risolto il punto precedente, dovresti includere la classe TheUser nel tuo UserController . Solo allora puoi creare nuovi oggetti usando quella classe. Quindi, nel tuo UserController, vai e aggiungi usa app \ utente; in cima. (Nota come ho incluso l'app \ organizzazione)
  • Una volta risolto, dovresti eseguire Dump composir -o per rigenerare il compositore.File di blocco che ti aiuterà ad accelerare il caricamento delle tue classi.

Dopo averlo fatto, dovresti essere in grado di accedere al modello di app \ utente come previsto.

Ulteriori spiegazioni (solo a scopo educativo)

Come sapete, lo sviluppo web non ha mai intenzione di essere uno spettacolo individuale. In genere puoi aspettarti di collaborare con altri sviluppatori circa il 90% delle volte. Affinché il progetto abbia successo, devi assicurarti che tutti seguano le regole di codifica generale.

Le regole riguarderà le convenzioni di denominazione e capisco che stare al passo con una convention di denominazione necessita richiede molto sforzo e può potenzialmente perdere molto tempo fino a quando tutti non possono capirli e seguirli. Ciò è particolarmente difficile per i nuovi sviluppatori che si uniscono al team.

Ti suggerirei di provare a leggere di più del codice di altre persone prima di iniziare a scrivere il tuo, solo per avere un'idea delle migliori pratiche del settore.

Alcune regole sono obbligatorie e alcune sono lasciate alla squadra per decidere come vogliono avvicinarti.

Guardando il problema dall'alto, noterai che tutte le classi dovrebbero essere scritte in uno StudlyCaps, quindi UserController e non User_Controller .

E questo è un esempio di una regola obbligatoria da seguire.

Ora, un esempio di ciò che tu come team potresti definire come regola interna è come chiami le tue classi, metodi e variabili.

Se si prevede che un progetto cresca nel tempo, puoi certamente aspettarti molte entità diverse che in un modo o nell'altro includono un utente, quindi è importante non trovare nomi vaghi per le tue classi, metodi e variabili.

Il mio consiglio personale qui è; Non aver paura di avere una classe più lunga o un nome metodo. Se hai bisogno di un commento che spiega il tuo metodo, allora il nome del metodo può probabilmente essere migliore.

Un esempio di questo è che se è necessario ottenere gli utenti da un database con alcune condizioni aggiuntive, forse quelli sono utenti di età superiore ai 50 anni, quindi non nominare il metodo getUser . Un modo migliore per nominarlo è getAlluseRover50yearsold .