2016-10-23 55 views

回答

2

簡單的回答:寫你自己的命令。

我該如何開始? 首先,您必須知道編譯視圖的名稱與原始刀片視圖不同。

他們有什麼名字? Laravel在完整文件路徑中調用sha1()。舉個例子。 layouts/app.blade.php的編譯文件名(附帶默認安裝)。

在版本

小於5.2的md5()是用來代替SHA1(),

5.2, 5.3 => sha1() 
5.1, 5.0, 4.2, 4.1, 4.0 => md5() 

假設您的版本> = 5.2

sha1('C:\xampp\htdocs\myapp\resources\views/layouts/app.blade.php'); 

所以文件名會9407584f16494299da8c41f4ed65dcb99af82ae2.php

我該怎麼做呢?

  • 創建新的命令,需要文件名作爲參數。
  • 在fire()函數中爲文件名添加視圖路徑。正如我以前C:\xampp\htdocs\myapp\resources\views(查看完整路徑)+ /layouts/app.blade.php(文件名)顯示你

$path = 'C:\xampp\htdocs\myapp\resources\views' . '/layouts/app.blade.php';

  • $path = sha1($path) . '.php';要獲得編譯的文件名。如果你有不同的看法路徑(:
  • 檢查文件名在編的意見,如果存在

你有類似的命令,

注意存在DIR

  • 刪除文件更改了默認值),您必須在我的代碼下面更改 。

  • <?php 
    namespace App\Console\Commands; 
    use Illuminate\Console\Command; 
    use RuntimeException; 
    class RemoveCompiled extends Command 
    { 
        protected $signature = 'view:clearOne {file}'; 
        protected $description = 'Remove one compiled view!'; 
        public function handle() 
        { 
         $path = sha1($this->laravel['config']['view.paths'][0] . '/' . $this->argument('file')); 
         $f = $this->laravel['config']['view.compiled'] . '\\'. $path . '.php'; 
         if(!file_exists($f)) 
          return; //do whatever you want 
         if(unlink($f)) 
          echo "File deleted!"; 
        } 
    } 
    

    通話:PHP人員視圖:CLEARONE佈局/ app.blade。PHP

    +0

    謝謝,好像這將工作,但我的問題是一些事物的不同,我已經開發了定製的刀片指令,我返回從它的東西動態字符串,可以說,一些數據庫查詢值,現在發生了什麼我添加了我的自定義指令的刀片並不反映來自數據庫的新值,UNless我清除了該視圖的編譯視圖(其中包含自定義指令),我認爲清除所有編譯視圖並不是一個好主意。 – harish

    +0

    @harish您可以在代碼中調用artisan命令。讓我們看看,你查詢並返回查詢結果。在返回視圖之前。你可以用相同的方法調用工匠。然後返回視圖。 – xdevnull

    +0

    是的,我明白了,但它是唯一的方式嗎?因此,我認爲對於每個http請求我的意見將得到編譯新鮮......這會影響應用程序的性能 – harish