2014-09-12 117 views
11

我在我的一個觀點中有個例外。然而,laravel並沒有告訴我視圖的名稱,所以我可以找到它並修復它,這是app/storage/views/110a3ecc0aa5ab7e6f7f50ef35a67a8b,這是沒有意義的。如何禁用Laravel視圖緩存?

如何禁用此視圖緩存,以便laravel使用並引用實際文件?

+0

[Laravel和開發中的視圖緩存可能重複 - 無法立即看到變化](http://stackoverflow.com/questions/20579182/laravel-and-view-caching-in-development-cant-see - 立即更改) – RobbieP 2014-09-12 19:34:28

+1

@RobbieP該問題涉及到php緩存,並且是一個完全獨立的問題。我的問題特別是關於laravel的內置視圖緩存系統,而不是重複的。 – Benubird 2014-09-16 10:36:16

+0

我一定誤解了你的問題。 Laravel需要在渲染之前編譯刀片文件,因此我不確定您能夠看到哪個命名視圖出現錯誤,但是您可以打開編譯視圖。看@安東尼奧的答案在這裏http://stackoverflow.com/a/19866546/942846 – RobbieP 2014-09-16 11:14:36

回答

18

開箱即用?你不能。但是,您可以擴展BladeCompiler類,覆蓋方法resposible因爲如果認爲已經過期檢查:

class MyBladeCompiler extends BladeCompiler { 

    public function isExpired($path) 
    { 
     if (! \Config::get('view.cache')) 
     { 
      return true; 
     } 

     return parent::isExpired($path); 
    } 

} 

你需要更換BladeCompiler比如在IoC容器中,用自己的編譯器:

$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); 
}); 

然後你只需要創建在您的應用程序/配置/ view.php文件

<?php 

return [ 

    'cache' => false, 

    'paths' => [base_path().'/resources/views'], 

    'pagination' => 'pagination::slider-3', 

]; 

該密鑰,或者,像我在這裏做的:

return [ 

    'cache' => in_array(App::environment(), ['production', 'staging']), 

]; 
+1

我可以在哪裏放第二部分的代碼?在AppServiceProvider中? – phaberest 2016-05-09 14:45:41

+0

我試圖添加AppServiceProvider,但它不調用isExpired方法。另外bindShared在5中被重命名爲singleton。5 – Aleksandrs 2017-12-13 12:05:00

-2

在開發環境中,我只是添加和修改了下:

  • bootstrap/start.php

    $env = $app->detectEnvironment(function(){return 'testing';}); 
    
  • app/config/testing/cache.php加入陣列

    'cache' => false, 
    
  • app/config/view.php加在陣列

    'cache' => false, 
    
+1

不起作用。這可能是由於laravel版本 - 我目前使用4.1;這是更改後的版本? – Benubird 2014-12-30 09:30:29

6

打開php.ini

opcache.revalidate_freq=0 
opcache.fast_shutdown=0 

改變此。重啓apache。

+1

這與laravel有什麼關係? – Benubird 2015-06-15 09:03:31

+0

我不知道如何但這解決了我的問題。 – veyselsahin 2015-06-15 21:31:27

+5

然後可能你的問題不是laravel緩存,而是php緩存 - 這些設置與php opcache相關,這與laravel視圖緩存不同。 – Benubird 2015-06-16 13:22:21

0

雖然有些人把這種粗略的,這是爲了做到這一點對一個小的應用程序我工作

在控制器(S),我的路由指向的最快和最起碼的辦法:

public function __construct() 
{ 
    exec('php /full/path/to/artisan view:clear'); 
}