Probleem
Ik heb geprobeerd een welsprekend model uit de database te halen, maar blijf doorgaan met: BadMethodCallExceptionMethode[vinden]
bestaat niet.
Dit is wat ik tot nu toe heb geprobeerd:
naamruimte-app;gebruik Illuminate\Database\Eloquent\Model;
gebruik App\Organisatie;
klasse Gebruiker breidt Model uit
/**
* De databasetabel die door het model wordt gebruikt.
*
* @var tekenreeks
*/
beschermd $table = 'gebruikers';
/**
* De kenmerken die zijn uitgesloten van het JSON-formulier van het model.
*
* @var-array
*/
beschermd $hidden = array('wachtwoord');
publieke functie organisaties()
retourneer $this->belongsToMany(Organisatie::class);
Dit is een basisgebruikersklasse die bij elk nieuw Laravel-project wordt geleverd. Nadat ik een nieuwe gebruiker heb gemaakt, kan ik duidelijk zien dat die gebruiker met ID3 in de database bestaat. Als ik echter het volgende doe, krijg ik de BadMethodCallException-methode [vinden] bestaat niet
openbare functie getUser ($ id)
$my_user = Gebruiker::find($id);
return view('gebruikersuser.index', array('gebruiker' => $mijn_gebruiker));
Mijn routes bestand routes\web.php:
Route::get('user/id', '[email protected]');Route::get('/', functie()
return View::make('test');
);
Oplossing
Er zijn een paar problemen met deze implementatie waardoor u mogelijk ontvangt BadMethodCallException-methode [vinden] bestaat niet
uitzondering.
- U moet de best practices volgen bij het benoemen van uw controllers als uw Model + "Controller" -woord, zodat u eindigt met een UserController in plaats van alleen User .
- De gebruikersklasse waarnaar u hier verwijst, is niet echt gerelateerd aan uw App\Gebruikersmodel. Als je het merkt, heb je je model nooit expliciet opgenomen. Dus ervan uitgaande dat je het vorige punt al hebt opgelost, zou je de User-klasse in je UserController moeten opnemen . Alleen dan kun je nieuwe objecten maken met die klasse. Dus in je UserController ga en voeg gebruik App\User toe; op de top. (Let op hoe ik App\Organization heb toegevoegd)
- Als je het eenmaal hebt opgelost, moet je de componist dump -o uitvoeren om de componist opnieuw te genereren.lock-bestand dat het laden van je lessen zal versnellen.
Nadat u dit hebt gedaan, zou u toegang moeten hebben tot uw App\User-model zoals u van plan was.
Nadere uitleg (alleen voor educatieve doeleinden)
Zoals u weet, is webontwikkeling nooit bedoeld geweest als een eenmanszaak. Over het algemeen kun je verwachten dat je ongeveer 90% van de tijd met andere ontwikkelaars zult samenwerken developers. Om het project succesvol te laten zijn, moet u ervoor zorgen dat iedereen de algemene codeerregels volgt.
Een van de regels gaat over naamgevingsconventies en ik begrijp dat het bijhouden van een duidelijke naamgevingsconventie veel moeite kost en mogelijk veel tijd van het team kan verspillen totdat iedereen ze kan begrijpen en volgen. Dit is vooral moeilijk voor nieuwe ontwikkelaars die zich bij het team voegen.
Ik zou willen voorstellen dat je probeert meer code van andere mensen te lezen voordat je de jouwe begint te schrijven, gewoon om een idee te krijgen van de beste praktijken in de branche.
Sommige regels zijn verplicht en sommige worden overgelaten aan het team om te beslissen hoe ze willen benaderen.
Als je het probleem van bovenaf bekijkt, zul je merken dat alle klassen in een StudlyCaps moeten worden geschreven, dus UserController en niet user_controller .
En dit is een voorbeeld van een verplichte regel om te volgen.
Een voorbeeld van wat u als team zou kunnen definiëren als uw interne regel, is hoe u uw klassen, methoden en variabelen een naam geeft.
Als van een project wordt verwacht dat het in de loop van de tijd groeit, kun je zeker veel verschillende entiteiten verwachten die op de een of andere manier een gebruiker bevatten, dus het is belangrijk dat je geen vage namen voor je klassen, methoden en variabelen bedenkt.
Mijn persoonlijke tip hier is; wees niet bang om een langere klasse of methodenaam te hebben. Als je een opmerking nodig hebt waarin je methode wordt uitgelegd, dan kan de naam van je methode waarschijnlijk beter zijn.
Een voorbeeld hiervan is dat als u gebruikers uit een database met een extra voorwaarde wilt halen, misschien zijn dat gebruikers ouder dan 50 jaar, uw methode dan niet getUsers noemen . Een betere manier om het een naam te geven is getAllUsersOver50YearsOld .