web-dev-qa-db-fra.com

Comment charger la vue depuis un répertoire alternatif dans Laravel 4

Dans le répertoire racine de mon Laravel 4 application, j'ai un dossierthemes. Dans le dossierthemes, j'aidefaultetAzure. Comment puis-je accéder à la vue à partir de ce dossierthemes/defaultsur un itinéraire spécifique 

Route::get('{slug}', function($slug) {
    // make view from themes/default here
});

Ma structure de répertoire:

-app

--themes

---défaut

---Azur

Je dois charger les vues depuis le dossier localhost/laravel/app/themes/default. S'il vous plaît expliquer cela.

29
devo

Ici, je n’accède pas à mon projet à partir du dossier public. Au lieu de cela, j'accède à partir de la racine du projet lui-même. 

J'ai vu une discussion de forum sur Using alternative path for viewshere . Mais je suis un peu confus à ce sujet. La solution discutée était,

Vous ajouteriez un location comme,

View::addLocation('/path/to/your/views');

Ajoutez ensuite namespace pour le thème,

View::addNamespace('theme', '/path/to/themes/views');

Puis le rendre,

return View::make('theme::view.name');

Quelle sera la valeur pour /path/to/

Puis-je utiliser le même projet dans différents systèmes d'exploitation sans changer de chemin?

Oui, nous pouvons le faire en utilisant ce qui suit,

Mettez ce qui suit dans app/start/global.php

    View::addLocation(app('path').'/themes/default');
    View::addNamespace('theme', app('path').'/themes/default');

Puis appelez vue comme la manière par défaut,

    return View::make('page');

Cela rendra le fichier page.php ou page.blade.php à partir du dossier project_directory/app/themes/defualt.

26
devo

Ceci est tout à fait possible avec Laravel 4. Ce que vous voulez, c'est en fait l'environnement de visualisation. Vous pouvez enregistrer des astuces d’espace de nommage ou simplement des emplacements supplémentaires que le Finder utilisera également en cascade. Jetez un coup d'oeil ici

Vous ajouteriez un emplacement comme ceci:

View::addLocation('/path/to/your/views');

Cela pourrait être plus facile si vous les gérez en espace de noms, juste au cas où vous auriez des noms de fichiers en conflit car votre chemin est ajouté au tableau de sorte qu'il ne sera mis en cascade que jusqu'à ce qu'il trouve une correspondance appropriée. Les vues namespaced sont chargées avec la syntaxe double-colon.

View::addNamespace('theme', '/path/to/themes/views');

return View::make('theme::view.name');

Vous pouvez également donner à addNamespace un tableau de chemins de vue au lieu d'un seul chemin.

37
Chirag Shah

J'ai développé un package de thèmes pour laravel 5 avec des fonctionnalités telles que:

  • Séparation des vues et des actifs dans les dossiers de thèmes
  • Héritage de thèmes: étendre un thème et créer des hiérarchies de thèmes

Essayez-le ici: igaster/laravel-theme

2
igaster

\View::addLocation($directory); fonctionne bien, mais la nouvelle façon de le faire consiste à utiliser loadViewsFrom($path, $namespace) (disponible chez tout fournisseur de service).

0
Mahmoud Zalt