2017-09-30 1 views
-1

Lorsque j'essayais d'exécuter une commande make: migration, elle renvoyait une erreur .. essayant d'obtenir la propriété de non-object (sans autre information). Il semblait que l'artisan ne réussissait pas du tout les commandesLaravel: les commandes php artisan ne fonctionnent pas, sauf si je commente un code

J'ai donc vérifié le laravel.log et cela m'a amené à mon constructeur html personnalisé, la ligne dans la construction.

class HtmlBuilder extends \Collective\Html\HtmlBuilder { 

    use CreatesAdminMenu, CreatesButtons; 

    /** 
    * Slugs accesible by the user 
    * @var array 
    */ 
    public $accessibleSlugs; 

    function __construct() 
    { 
     $this->accessibleSlugs = auth()->user()->accessibleSlugs; 
    } 

Ce code a fonctionné très bien, aussi quand je dd-ed auth() -> utilisateur() -> accessibleSlugs, je me donné un tableau valide. Mais seulement quand je la mettre en commentaire, la commande artisan php fonctionne bien à nouveau ...

Le modèle Admin derrière elle contient cette méthode

public function getAccessibleSlugsAttribute() 
{ 
    return static::$roleSlugs[$this->role]; 
} 

Espérons que quelqu'un ici peut me donner une certaine direction pour résoudre ce problème. Si quelqu'un est encore intested ... J'ai fait plus de creusement, en cours d'exécution ['prop'] au lieu de '-> prop' ne casse pas l'artisan ... par pourquoi: S !! Ainsi, dans ma construction de HtmlBuilder:

function __construct() 
{ 
    $this->accessibleSlugs = auth()->user()['accessibleSlugs']; //works! 

    //$this->accessibleSlugs = auth()->user()->accessibleSlugs; //Break Artisan! 
} 

Dans un routeMiddleware j'accéder aussi comme ceci: « -> accessibleSlugs », et ici, il ne pose aucun problème: S

Répondre

0

auth()->user()->accessibleSlugs ne devraient pas travailler quand exécuter des commandes artisanales; il n'y a pas d'utilisateur authentifié. Cela semble vraiment bizarre qu'il y ait une façon dont cela fonctionne réellement pour vous. Je pense que c'est une erreur dans votre débogage; peut-être avez-vous effectué le débogage dans le contexte d'une requête Web où vous étiez connecté.

Une trace de pile complète indiquera probablement que vous avez une commande artisan qui instancie HtmlBuilder. Cela provoque le problème car la structure d'artisan instancie en interne toutes les commandes d'artisan, même lorsqu'elles ne sont pas invoquées par vous. Vous devriez reporter les dépendances à la méthode handle où elle ne se produira que si cette commande spécifique est invoquée.

Le problème d'origine persistera toujours; vous avez une commande artisan qui utilise un HtmlBuilder, et le HtmlBuilder a des hypothèses sur l'état de l'application (l'authentification). Vous devrez probablement soit modifier HtmlBuilder pour prendre en charge les invocations anonymes, soit modifier la commande artisan pour accepter un ID utilisateur à emprunter en tant que paramètre. (Exemple: php artisan do:the-thing --user-id=1337)