2014-04-21 6 views
10

Ich möchte die erweiterte Konfiguration von Yii2 mit separaten Frontend-, Backend-, Common- und Konsolenanwendungen verwenden. Ich habe viele gemeinsame Assets, einschließlich Stylesheets, JS-Dateien und Schriftarten, die sowohl in den Frontend- als auch in den Backend-Anwendungen verwendet werden. Es macht dann nur Sinn, diese Assets gemeinsam in einen Assets-Ordner zu legen.Yii2: Gemeinsame Assets mit erweiterter Konfiguration

Dann beginnt meine Quandry. Es scheint, dass ich eine separate AppAsset.php-Datei benötige, um Assets in den Frontend- und Backend-Teilen der gesamten Anwendung zu verwalten, da einige Dinge zwischen den beiden unterschiedlich sein werden. (Ich bin mir nicht sicher, ob ich Frontend, Backend usw. als separate Anwendungen innerhalb eines übergreifenden Programms bezeichnen oder sie als Teilanwendungen einer großen übergreifenden Anwendung bezeichnen soll.) Wie auch immer, es scheint, dass ich zwei AppAsset Manager brauche . Ich werde alle Dateikonvertierungen (z. B. scss → css) und die Dateikomprimierung selbst handhaben, daher muss ich den Asset Manager dafür nicht konfigurieren.

Leider ist die Dokumentation zu AppAsset und Asset-Bundles überhaupt nicht klar, wie bestimmte Dateien oder Verzeichnisse in einem Bundle enthalten sein können. Die einzige Sache, die ich sehe, ist, wie man Bestimmungsorte unter Verwendung der Variablen $css, $js, spezifiziert. Bei Eingabeverzeichnissen sehe ich nur einen $ sourcePath. Bedeutet das, dass ich ein separates Bündel (und $sourcePath) für jede einzelne Javascript-, CSS-, Bild-, usw. Datei erstellen muss. Das ist eine Menge Bündel! Sicherlich gibt es eine Möglichkeit, mehrere Asset-Dateien in ein einzelnes Paket zu integrieren. Kann mir jemand zeigen wie?

Antwort

2

Nun, ich glaube, der Zweck eines "Bundles" ist es, Ihnen die Auswahl der gewünschten Dateien zu ermöglichen.

Sie müssen für jede einzelne Datei kein anderes Paket erstellen.

Zum Beispiel in meinem super einfach individuelle Assetmanager Ich habe dies:

namespace frontend\assets; 
use yii\web\AssetBundle; 
use yii\web\YiiAsset; 

class CustomAsset extends AssetBundle{ 
    public $basePath = '@webroot'; 
    public $baseUrl = '@web'; 
    public $css = [ 
     'css/custom.css', 
     'css/custom_modals.css' 
    ]; 
} 

Da die beiden CSS folders/files werden im Frontend-Abschnitt meines Projekts befindet und die Custom ist auch dort befindet, wenn ich mich registrieren Dieser AssetManager wird durch das Array $css gehen und sie dem Header-Abschnitt hinzufügen. Dasselbe gilt für das Array , das Sie bei Bedarf hinzufügen würden. Denken Sie auch daran, dass sich die Dateien in einem für den Web zugänglichen Ordner befinden müssen.

+3

Ja, meine ursprüngliche Frage entstand in den frühen Tagen von Yii2, als die Dokumentation sehr schlecht war. Es wurde verbessert, aber die Dokumente auf AssetManager sind immer noch schlecht. Aber ich habe es herausgefunden. Übrigens sollten sich Ihre Assets nicht in einem Web-fähigen Ordner befinden. AssetManager wird sie automatisch in Ihrem Projekt in den Ordner/web/assets veröffentlichen (kopieren). Ich halte meine Original-Assets in Frontent \ Assets zusammen mit den Asset.php-Dateien. – LarryTX

+0

Cool! Danke für den Tipp Larry! Das wusste ich nicht. – Schwoebel