J'ai une exception dans l'un de mes points de vue. Cependant, au lieu de me dire le nom de la vue afin que je puisse la trouver et la corriger, Laravel dit que c'est dans app/storage/views/110a3ecc0aa5ab7e6f7f50ef35a67a8b
, ce qui n'a pas de sens.
Comment puis-je désactiver cette mise en cache de vue, de sorte que laravel utilise et se réfère aux fichiers réels?
Hors de la boîte? Tu ne peux pas. Mais vous pouvez étendre la classe BladeCompiler en remplaçant la méthode chargée de vérifier si la vue a expiré:
class MyBladeCompiler extends BladeCompiler {
public function isExpired($path)
{
if ( ! \Config::get('view.cache'))
{
return true;
}
return parent::isExpired($path);
}
}
Vous devrez remplacer l'instance BladeCompiler dans le conteneur IoC par votre propre compilateur:
$app = App::make('app'); // or just $app = app();
$app->bindShared('blade.compiler', function($app)
{
$cache = $app['path.storage'].'/views';
return new MyBladeCompiler($app['files'], $cache);
});
Et il vous suffit ensuite de créer cette clé dans votre fichier app/config/view.php
<?php
return [
'cache' => false,
'paths' => [base_path().'/resources/views'],
'pagination' => 'pagination::slider-3',
];
Ou, comme je le fais ici:
return [
'cache' => in_array(App::environment(), ['production', 'staging']),
];
Solution
ouvrir php.ini
opcache.revalidate_freq=0
opcache.fast_shutdown=0
changer pour cela. redémarrez Apache.
Bien que certains appellent cela un peu sommaire, c’était le moyen le plus rapide et le plus minimal de le faire pour une petite application sur laquelle je travaillais.
Sur le (s) contrôleur (s) indiqué (s) par mes routes:
public function __construct()
{
exec('php /full/path/to/artisan view:clear');
}
Laravel Crée un fichier de cache de vue car il a été demandé de le faire. Dans .env
File, vous rencontrerez cache_driver
dont la propriété par défaut est file
et remplacez-le par array
.