Dans Laravel 3, j'avais l'habitude de faire cela.
<?php render('partials.header'); ?>
Cela a été fait dans les vues "PHP", sans utiliser les templates Blade de Laravel.
Quel est l'équivalent de cela dans la version 4?
J'ai essayé
<?php @include('partials.header'); ?>
Ça ne marche pas.
Si je fais
@include('partials.header')
Je dois sauvegarder mon fichier sous le nom ".blade.php"
Comment inclure une "sous-vue" sans utiliser le modèle de lame?
Il existe différentes manières d'inclure une vue dans une vue dans Laravel 4. Votre choix dépendra de l'un des résultats décrits ci-dessous ...
Vous pouvez compiler (rendre) les vues partielles dans le contrôleur approprié et les transmettre à la vue principale à l'aide du tableau $data['']
.
Cela peut devenir fastidieux à mesure que le nombre de vues augmente, mais bon, au moins, il y a beaucoup de flexibilité :)
Voir le code ci-dessous pour un exemple:
...
public function showMyView()
{
/* Header partial view */
$data['header'] = View::make('partials.header');
/* Flexible enough for any kind of partial views you require (e.g. a Header Menu partial view) */
$data['header_menu'] = View::make('partials.header_menu');
/* Footer partial view */
$data['footer'] = View::make('partials.footer');
return View::make('myView', $data);
}
...
Vous pouvez inclure les partiels ci-dessus comme suit (à n’importe quelle position dans votre code View):
<html>
<head></head>
<body>
<!-- include partial views -->
<?php echo ($header) ?>
<?php echo ($header_menu) ?>
<div id="main-content-area"></div>
<?php echo ($footer) ?>
</body>
</html>
Vos vues partielles seront maintenant ajoutées à votre vue principale.
Il existe en fait un moyen beaucoup plus simple que d’utiliser la méthode ci-dessus: il suffit d’inclure ceci dans le code HTML de la vue ...
<html>
<head></head>
<body>
<!-- include partial view: header -->
<?php echo View::make('partials.header') ?>
<div id="main-content-area">
</div>
<!-- include partial view: footer -->
<?php echo View::make('partials.footer') ?>
</body>
</html>
Assurez-vous que la structure de dossier pour les partiels est [views/partials/header.php] afin de fournir le chemin de fichier correct à la fonction View :: make () de Laravel.
Si vous essayez de transmettre le $data['page_title']
à un contrôleur, les vues imbriquées ne recevront pas les données.
Pour transmettre des données à ces vues imbriquées, procédez comme suit:
<html>
<head></head>
<body>
<?php
/* Pass page title to header partial view */
$data ['page_title'] = "My awesome website";
echo View::make('partials.header', $data);
?>
<div id="main-content-area"></div>
<?php echo View::make('partials.footer') ?>
</body>
</html>
La question disait clairement: "Sans utiliser le modèle de lame", je me suis donc assuré de donner une solution qui n'inclut aucun code de modèle de lame.
Vous pouvez imbriquer vos partiels dans des vues essayez ceci
View::make('folder.viewFile')->nest('anyname', 'folder.FileName');
Accédez ensuite au fichier de vue imbriquée à partir de votre modèle {{ $anyname }}
. Ainsi, vous n’avez pas à inclure de fichiers dans votre vue. Cela devrait également fonctionner pour le fichier .php.
Je ne suis pas sûr du nombre de personnes qui ont utilisé Laravel 4 dans ce billet, mais si vous souhaitez inclure des partiels ou séparer vos types de vues, vous pouvez le faire avec @includes
par exemple, si vous voulez un dossier de partiels pour votre en-tête, pied de page, barre latérale, etc.
créer un répertoire pour les partiels sous
app/views/partials
Puis créer un partiel
app/views/partials/navigation.blade.php
Puis, dans votre fichier de modèle maître, ajoutez la ligne
@include('partials.navigation')
Voilà tout ce qu'il faut.
** Bonus vous pouvez également transmettre des données à un partiel ou inclure des partiels imbriqués dans un partiel
Je sais que la réponse est un peu tardive, mais je me suis dit que je ne voyais pas cette solution parmi les autres réponses, c’était bien.
Si vous souhaitez inclure votre en-tête et votre pied de page sur chaque page, je les ajouterais aux filtres avant et après. Il suffit d'aller à filters.php dans votre dossier d'application
App::before(function($request)
{
echo View::make('partials.header');
});
App::after(function($request, $response)
{
echo View::make('partials.footer');
});
En procédant ainsi, vous n'avez rien besoin d'ajouter dans les fichiers de vue pour les inclure.
Vous pouvez utiliser la fonction de nid de View
View::make('default.layout')->nest('header', 'default.header');
Utilisez le troisième paramètre pour transmettre des données au modèle
View::make('default.layout')->nest('header', 'default.header', ['name' => 'John Doe', 'test' => 'It works!']);
sur vos vues/default/header.blade.php
<div>hey {{ $name }}! {{ $test }}</div>
Je suis encore assez nouveau à Laravel, mais je pense que le dessous est plutôt idéal ...
Route::get('/', function()
{
$data['title'] = 'sample';
return View::make('page', $data);
});
# /views/partials/header.php
# /views/partials/footer.php
View::composer('page', function($view)
{
$view->with('header', View::make('partials.header', $view->getData()));
$view->with('footer', View::make('partials.footer', $view->getData()));
});
Voir Laravel Voir les compositeurs .. http://laravel.com/docs/responses#view-composers
/views/page.php
<?php echo $header; ?>
<div>CONTENT</div>
<?php echo $footer; ?>
Dans une vue, faites simplement écho à l'autre vue:
echo View::make('header'); //This will look for a view called header.php