2016-04-20 18 views
0

Wie konfigurieren Kohana + Twig Modul so wird der Zweig "beschreibbar von allen" Berechtigungen für alle seine Cache-Verzeichnis und seine Nachkommen Dateien?Cache-Dateien Berechtigungen beheben für Kohana Twig-Modul

So zum Beispiel, wenn ich meine Bewerbung durch das Apache Modul (mod_php) und Cache-Datei Besitzer geführt sind apache (oder httpd) Benutzer, kann ich Cache-Dateien entfernen (um den Cache zu reinigen oder vollständig ganze entfernen Anwendung) mit regulärem Benutzer und ssh Zugriff.

Ich kann es mit Kohana Cache, aber Twigs Cache ist irgendwie anders erstellt.

Antwort

0

Es ist nicht sehr einfach, aber auch nicht zu kompliziert. Ich habe den unten dargestellten Zustand durch Versuch-und-Irrtum-Methode erreicht.

  1. Erstellen Sie eine Klasse, die von Twig_Cache_Filesystem erbt und statt davon verwendet werden. Check this out:

    <?php 
    namespace Application\Twig; 
    
    class Cache_Filesystem extends \Twig_Cache_Filesystem 
    { 
        public function write($key, $content) 
        { 
         $old = umask(0000); 
         parent::write($key, $content); 
         umask($old); 
        } 
    } 
    

    Beachten Sie, dass diese Klasse Name eindeutig ist es haben muss, so ist es eine gute Idee, es zu Namespace. Außerdem muss es für anderen Code zugänglich sein. Verwenden Sie daher die Autoloading-Funktion composer.

    Dies ist die Lösung selbst, der Rest des Leitfadens ist nur die Art und Weise, ihn in Kohana + Twig-Ökosystem zu implementieren.

  2. Kopieren Twig.php von modules/kohana-twig/classes/Twig.php in dem Verzeichnis Ihre Anwendung, dh application/classes/Twig.php (danke Kohana's Cascading Filesystem!)

  3. ein wenig neu kopierte Datei, Ändern Twig_CacheInterface Instanz lassen in der Konfigurationsdatei (application/config/twig.php) statt nur übergeben werden eine einfache Zeichenfolge (Angabe zum Cache-Verzeichnis des Twigs). Werfen Sie einen Blick von meinem Beispiel:

    <?php defined('SYSPATH') or die('No direct script access.'); 
    
    class Twig extends Kohana_Twig 
    { 
        /** 
        * Initialize the Twig module 
        * 
        * @throws Kohana_Exception 
        * @return bool 
        */ 
        public static function init() 
        { 
         $path = Kohana::$config->load('twig.environment.cache'); 
         if (is_string($path)) { 
          return parent::init(); 
         } else if ($path instanceof Twig_CacheInterface) { 
          return true; 
         } 
    
         throw new Kohana_Exception('Twig cache could not be initialized'); 
        } 
    
    } 
    
  4. In Konfigurationsdatei für kohana-twig Modul, das heißt application/config/twig.php (falls noch nicht von Modul zu Ihrer Anwendung kopiert, tun Sie es jetzt), definieren environment.cache Schlüssel wie folgt aus:

    return array(
    
        'loader' => array(
         'extension' => 'twig', 
         'path' => 'views', 
        ), 
        'environment' => array(
         'auto_reload' => (Kohana::$environment >= Kohana::TESTING), 
         'autoescape' => true, 
         'base_template_class' => 'Twig_Template', 
         // Following line is related to this issue and fix: 
         'cache' => new \Application\Twig\Cache_Filesystem(APPPATH . 'cache/twig'), 
         'charset' => 'utf-8', 
         'optimizations' => - 1, 
         'strict_variables' => false, 
        ), 
        'functions' => array(), 
        'filters' => array(), 
        'tests' => array(), 
    } 
    

Das funktioniert für mich. Hoffentlich hilft es jemandem, der mit ähnlichen Problemen kämpft.