web-dev-qa-db-fra.com

Comment désactiver le cache d'affichage Laravel?

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?

14
Benubird

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']),

];
19

Solution

ouvrir php.ini 

opcache.revalidate_freq=0
opcache.fast_shutdown=0

changer pour cela. redémarrez Apache.

8
veyselsahin

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');
}
1
zanderwar

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.

0
Prem Sarojanand