2014-09-12 17 views
11

Tôi có ngoại lệ trong một trong các chế độ xem của mình. Tuy nhiên, thay vì nói cho tôi tên của cái nhìn để tôi có thể tìm thấy nó và sửa chữa nó, laravel nói rằng nó là trong app/storage/views/110a3ecc0aa5ab7e6f7f50ef35a67a8b, đó là vô nghĩa.Làm cách nào để vô hiệu hóa bộ nhớ cache xem Laravel?

Làm cách nào để tắt chế độ xem bộ đệm này, do đó Laravel sử dụng và tham chiếu đến các tệp thực?

+0

bản sao có thể có của [Laravel và xem bộ đệm trong khi phát triển - không thể thấy thay đổi ngay lập tức] (http://stackoverflow.com/questions/20579182/laravel-and-view-caching-in-development-cant-see -ngoại-phải-đi) – RobbieP

+1

@RobbieP câu hỏi đó đề cập đến bộ nhớ đệm php, và là một vấn đề hoàn toàn riêng biệt. Câu hỏi của tôi là cụ thể về hệ thống bộ nhớ đệm được xây dựng sẵn của Laravel và không phải là bản sao. – Benubird

+0

Tôi phải hiểu sai câu hỏi của bạn. Laravel cần phải biên dịch các tệp lưỡi của bạn trước khi chúng được hiển thị, vì vậy tôi không chắc chắn bạn sẽ có thể xem được xem tên lỗi nào xảy ra, nhưng bạn có thể mở chế độ xem đã biên dịch. Xem câu trả lời của @ Antonio tại đây http://stackoverflow.com/a/19866546/942846 – RobbieP

Trả lời

18

Hết hộp? Bạn không thể. Nhưng bạn có thể mở rộng các lớp BladeCompiler, trọng phương pháp resposible để kiểm tra nếu quan điểm đã được hết hạn:

class MyBladeCompiler extends BladeCompiler { 

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

     return parent::isExpired($path); 
    } 

} 

Bạn sẽ cần phải thay thế các dụ BladeCompiler trong IoC container, với trình biên dịch của riêng bạn:

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

Và sau đó bạn chỉ cần tạo mà quan trọng trong ứng dụng của bạn/config/view.php tập tin

<?php 

return [ 

    'cache' => false, 

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

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

]; 

Hoặc, như tôi làm ở đây:

return [ 

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

]; 
+1

Tôi có thể đặt phần mã thứ hai ở đâu? Trong AppServiceProvider? – phaberest

+0

Tôi đã cố gắng thêm vào trong AppServiceProvider, nhưng nó không gọi phương thức isExpired. Ngoài ra bindShared được đổi tên thành singleton trong 5.5 – Aleksandrs

-2

Trong môi trường phát triển, tôi chỉ cần thêm và sửa đổi tiếp theo:

  • bootstrap/start.php

    $env = $app->detectEnvironment(function(){return 'testing';}); 
    
  • app/config/testing/cache.php thêm trong mảng

    'cache' => false, 
    
  • app/config/view.php thêm vào mảng

    'cache' => false, 
    
+1

Không hoạt động. Điều này có thể do phiên bản laravel - Tôi đang sử dụng 4.1 hiện tại; điều này có thay đổi trong phiên bản sau không? – Benubird

6

Giải pháp

mở php.ini

opcache.revalidate_freq=0 
opcache.fast_shutdown=0 

thay đổi này. khởi động lại apache.

+1

Làm thế nào điều này liên quan đến laravel? – Benubird

+0

Tôi không biết làm thế nào nhưng điều này giải quyết được vấn đề của tôi. – veyselsahin

+5

Sau đó, có lẽ vấn đề của bạn không phải là bộ nhớ đệm, nhưng bộ nhớ đệm php - các cài đặt này liên quan đến opcache php, đó là một điều khác biệt từ bộ nhớ cache xem laravel. – Benubird

0

Mặc dù một số sẽ gọi sơ sài này, đây là cách nhanh nhất và tối thiểu nhất để làm điều này trên một ứng dụng nhỏ, tôi đã làm việc trên

Trên bộ điều khiển (s) mà tuyến đường của tôi chỉ vào:

public function __construct() 
{ 
    exec('php /full/path/to/artisan view:clear'); 
} 
Các vấn đề liên quan