Je suis confronté à un problème où je ne veux pas afficher un élément X dans certaines vues.
L'exemple concret est que je ne veux pas afficher le curseur des images de produits sur les pages. contact
y about us
mais il devrait être visible sur toutes les autres pages (environ 6 de plus).
Alors comment exclure le rendu de la div en n de m pages sans faire de très longues @if
conditions ? Une idée de solution élégante ?
Editar Je réponds à la question de savoir pourquoi je ne veux pas mettre cela dans un fichier de vue autonome :
Imaginez que vous voulez que cette ligne soit visible dans toutes vos vues sauf une spécifique, et une seule
<span>Lorem Ipsum</span>
Il s'agit d'une simple ligne de code HTML, ce n'est pas la peine de créer un autre fichier dans le projet parce que ce sera un désordre dans l'arbre des fichiers du projet, et un autre exemple qui est une mauvaise solution de contournement.
@if(\Request::route()->getName() !== "some.very.long.route.alias.name.that.looks.ugly")
<span>Lorem Ipsum</span>
@endif
Rend le code difficile à lire et à comprendre lorsque le projet s'étend.
Edit 2 J'ai prédit certaines des solutions suggérées et j'ai déjà écrit pourquoi ce n'est pas une façon appropriée de gérer cette situation. Je cherche plus probablement une solution qui soit similaire à @can
ou @cannot
qui dépend de l'itinéraire actuel
Edit 3 : Travailler sur la solution
Edit 4 : J'ai posté une réponse ici mais elle n'est pas encore parfaite (je ne la marque pas encore comme acceptée), donc juste pour les lecteurs de ce sujet je vais coller la copie de celle-ci ci-dessous
Ok j'ai fait une simple directive de lame qui résout ce cas dans une manière agréable à regarder
Dans un premier temps, créez un tableau qui détermine l'accès à la route pour le html snippet
Le meilleur endroit serait de créer ce fichier dans la configuration par exemple dans le répertoirepresence.php
fichier<?php return [ 'ipsum' => [ // presence alias 'about', // disallowed route #1 'contact' // disallowed route #2 ], ];
Ensuite, créez une directive dans
AppServiceProvider.php
classe<?php namespace App\Providers; use Illuminate\Support\Facades\Blade; use Illuminate\Support\ServiceProvider; class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. * * @return void */ public function boot() { Blade::directive('presence', function($alias) { return "<?php if (in_array(\Request::route()->getName(),config('presence.'.$alias))):?>"; }); Blade::directive('endpresence', function() { return '<?php endif; ?>'; }); } /** * Register any application services. * * @return void */ public function register() { // } }
Et dans l'utilisation finale de cette astuce en vue html
@presence('ipsum') <span>Lorem Ipsum</span> @endpresence
Il imprimera
Lorem Ipsum
si le nom de l'itinéraire actuel n'est pas dansipsum
(qui est déclaré dans\App\config\presence.php
fichier donc nous pouvons y accéder avecconfig()
méthode d'aide)Ce serait génial si je pouvais gérer les caractères génériques, comme par exemple
<?php return [ 'ipsum' => [ // presence alias 'admin.category.*', // advanced route pattern #1 'admin.users.*' // advanced route pattern #2 ], ];
Mais je vais y réfléchir plus tard.
Les commentaires ou les critiques sont toujours les bienvenus :)