J'essaie de choisir dynamiquement le modèle de lame maître selon le rôle de l'utilisateur actuel connecté. (ici, il devrait aller dans le bloc d'authentification du 'propriétaire')
@extends('theme::Admins.outline.layout.master') @include('theme::Admins.shopmanager.layout.common.header') @include('theme::Admins.shopmanager.layout.common.left-sidebar') // The error throws from inside this view. @include('theme::Admins.shopmanager.layout.common.footer') @section('title-head', __('Shop Manager'))
mais cela donne toujours erreur en essayant de compiler le modèle maître 'shopmanager'. Il n'entre pas dans le bloc @auth 'shopmanager' car il n'imprime rien si j'imprime à l'intérieur de ce bloc.
Cela ne fonctionne que si je commente complètement cette ligne.
P.S.:
Ceci est le fichier de modèle principal theme :: Admins.shopmanager.layout.master
qui ne doit pas être chargé.
@auth('shopmanager') @extends('theme::Admins.shopmanager.layout.master') @endauth @auth('shopowner') @extends('theme::Admins.shopowner.layout.master') @endauth
Je peux encapsuler la vérification @auth
autour des lignes @include
mais le point est , ce fichier complet doit être ignoré de la compilation.
3 Réponses :
Essayez le code ci-dessous, j'espère que cela vous aidera:
@if(Auth::check()) @if(Auth::user()->role=='shopmanager') @extends('theme::Admins.shopmanager.layout.master') @else @extends('theme::Admins.shopowner.layout.master') @endif @endif
J'avais déjà essayé la syntaxe if (Auth :: guard ('shopmanager') -> check ())
avant et toujours le même problème. essayé votre syntaxe aussi.
L'erreur provient de l'une des vues qui est incluse dans le modèle principal de 'shopmanager' que nous étendons dans le code ci-dessus. dans cette vue, la variable $ user est évidemment introuvable et c'est pourquoi nous ne voulons pas charger le wrapper de vue maître complet.
Je pense que le problème n'est pas ici, mais dans le fichier d'application principal.
J'ai également ajouté le fichier de modèle principal. mais mon point est .. pourquoi même il va à l'intérieur pour vérifier les fichiers d'inclusion?
Tout d'abord, vous vérifiez que le rôle de gestionnaire de magasin est disponible ou non? essayez ceci et vérifiez si vous obtenez ou non @if (Auth :: user () -> role == 'shopmanager') dd (Auth :: user () -> role) @endif
continuons cette discussion dans le chat .
C'est vraiment utile pour moi. Merci de votre aide.
Si vous avez une authentification multiple cette fois-ci, essayez ci-dessous:
@if(Auth::guard('shopmanager')->user()) @extends('') @else @extends('') @endif
Dans mon cas, je gère le responsable, le client et l'administrateur avec ce code.
Cela n'a pas fonctionné pour moi. Je parie que @extend va toujours pour la compilation indépendamment de la condition. vérifier ma solution qui a fonctionné vous l'expliquera.
avez-vous déjà essayé @include (..)
d'un autre modèle dans votre modèle principal (qui n'est pas connecté) et y imprimer une variable non définie. vous comprendrez le point.
RÉSOLU
Conformément à mon apprentissage,
@extend (...)
sera toujours compilé quelles que soient les conditions de bouclage externe. doit donc être déplacé vers des blocs basés sur des variables dynamiques.@auth('shopmanager') @php $masterTemplate = 'theme::Admins.shopmanager.layout.master'; @endphp @endauth @auth('shopowner') @php $masterTemplate = 'theme::Admins.shopowner.layout.master'; @endphp @endauth @extends($masterTemplate)
Cela devrait être marqué comme la meilleure réponse, j'essayais de comprendre pourquoi étend ignorait mes conditions (affichant à la fois la version mobile et la version de bureau). Vous avez totalement sauvé ma journée!
Je pense que vous avez une faute de frappe sur la dernière ligne. Il doit être @endauth. Peut-être avez-vous un problème avec vos gardes d'authentification? Etes-vous sûr que "shopowner" correspond à l'un des gardes configurés dans votre auth.php?
Vous avez deux rôles (1) shopmanager (2) shopowner. droit??
@wau, faute de frappe j'ai mis à jour. mais ce n'était pas le problème.
@Manisha, le rôle n'est pas un nom de colonne dans la table. J'utilise la garde de laravel.