Bien que ce soit un ancien article mais au cas où quelqu'un tombe dessus comme moi. J'ai obtenu quelque chose de similaire en utilisant le framework Laravel, en enregistrant la vue dans la base de données de telle sorte que, chaque fois que j'ai besoin d'afficher la vue, je la récupère de la DB, et je la charge dans un fichier en utilisant la fonction php file_put_contents()
et je la rends avec la méthode view()
. Par exemple;
$blade = DB::table('pages')->where('name', 'index')->first();
file_put_contents('template.blade.php', $blade->view);
//Notez que si j'ai aussi besoin de passer des données à la vue, je peux le faire comme ceci
//$data = ['page_title' => 'Testing Blade Compilation using views Saved in DB'];
// return view(template, $data);
return view('template');
Encore une fois, dans mon cas pour une sécurité accrue, j'ai créé des modèles de base avec le schéma de templating blade & j'ai injecté des inputs créés par l'utilisateur dans le modèle après avoir assaini l'entrée générée en utilisant HTMLPurifier et en rendant la vue. Par exemple
$view = view('base.template')->render();
//de manière similaire à ce qui précède, je peux charger des données dans la vue comme ceci
//$data = ['page_title' => 'Testing Blade Compilation using views Saved in DB'];
//$view = view('base.template', $data)->render();
$purifier = new HTMLPurifier(HTMLPurifier_Config::createDefault());
$with_purified_input = $purifier->purify($user_generated_input);
str_replace('view_variable', $with_purified_input, $view);
return $view;