À chaque fois que je modifie quelque chose dans les modèles, je dois vider le cache manuellement ... Est-il possible de désactiver la mise en cache des modèles en mode développement?
Si vous utilisez PHP 5.5, alors je vous suggère de configurer opcache dans php.ini
opcache.revalidate_freq=0
Cette valeur définit la fréquence horaire à laquelle les vues doivent être mises à jour à partir du cache. Cette valeur est généralement de 60 secondes environ. En le mettant à 0, votre cache sera mis à jour à chaque fois.
J'ai utilisé la solution de "Gadoma" quelques fois. Mais puisqu'il n'y a pas de "filters.php" dans Laravel 5 , voici ma classe de middleware pour la dernière version de Laravel:
<?php
namespace App\Http\Middleware;
use Closure;
use Illuminate\Contracts\Routing\Middleware;
class CacheKiller implements Middleware {
/**
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
$cachedViewsDirectory = app('path.storage').'/framework/views/';
if ($handle = opendir($cachedViewsDirectory)) {
while (false !== ($entry = readdir($handle))) {
if(strstr($entry, '.')) continue;
@unlink($cachedViewsDirectory . $entry);
}
closedir($handle);
}
return $next($request);
}
}
Et dans votre Kernel.php:
protected $middleware = [
...
'App\Http\Middleware\CacheKiller',
];
Pas la meilleure solution mais ça marche.
Selon cette demande , changez le pilote de cache de votre application en array
pour l'environnement local.
Il semble que la lame utilise l'horodatage de fichier pour reconstruire les pages.
Ainsi, si les pages ne sont pas mises à jour directement par le serveur lame, plusieurs options s'offrent à vous:
1 - Si vous travaillez par FTP ou par un autre protocole distant, la date peut ne pas correspondre aux deux systèmes d’exploitation. Essayez de mettre votre client dans le futur ou votre serveur dans le passé (quelques secondes suffisent).
Rappel : pour les OS basés sur Linux, un simple date --set
fonctionne, par exemple date --set 18:30:00
pour 18h30.
2 - (Repost wino
comment) Votre client peut ne pas mettre à jour l'horodatage de votre fichier modifié. Vous devez éditer la configuration de votre IDE.
Il est plus difficile de déboguer quand je ne comprends pas vraiment votre configuration. Tout ce que je peux offrir comme aide, au lieu de supprimer le cache de vue directement, vous pouvez exécuter:
$ php artisan cache:clear
Vous pourriez probablement ajouter un processus (selon votre système d'exploitation) pour écouter les modifications de fichiers et exécuter automatiquement la commande.
Dans laravel 5.2: Créez un nouveau middleware, ajoutez à 'web' $middlewareGroups
dans Kernel.php
. Cela appellera la commande artisan pour effacer tous les fichiers de vue compilés.
namespace App\Http\Middleware;
use Artisan;
use Closure;
class ClearViewCache
{
/**
* Handle an incoming request.
*
* @param \Illuminate\Http\Request $request
* @param \Closure $next
* @return mixed
*/
public function handle($request, Closure $next)
{
if (env('APP_ENV') === 'local') {
Artisan::call('view:clear');
}
return $next($request);
}
}
Vous pouvez essayer ce filtre de route en définissant le cache time
sur 0 afin que votre vue soit recréée à chaque demande :)
De ce Gist ,
Route::filter('cache', function( $response = null )
{
$uri = URI::full() == '/' ? 'home' : Str::slug( URI::full() );
$cached_filename = "response-$uri";
if ( is_null($response) )
{
return Cache::get( $cached_filename );
}
else if ( $response->status == 200 )
{
$cache_time = 30; // 30 minutes
if ( $cache_time > 0 ) {
Cache::put( $cached_filename , $response , $cache_time );
}
}
});
J'espère que cela vous aide, mais je ne l'ai pas testé, donc je ne peux pas garantir que ça va marcher.
Quelques problèmes supplémentaires liés à la mise en cache de la mise à niveau PHP 5.3 à PHP 5.5 sont disponibles ici: Laravel et afficher la mise en cache en développement - les modifications ne sont pas visibles immédiatement
Il suffit de mettre cela quelque part dans votre application:
if (env('APP_DEBUG')) ini_set('opcache.revalidate_freq', '0');