2015-03-01 3 views
5

Ich versuche, ein alias in Yii2 zu setzen, aber ich bin ein Invalid Parameter/Invalid path alias für den Code unten bekommen, das in der App-Konfigurationsdatei verwendet wird:Aliase in Yii2 innerhalb der App-Konfigurationsdatei einstellen

'aliases' => [ 
    // Set the editor language dir 
    '@editor_lang_dir' => '@webroot/scripts/sceditor/languages/',  
], 

Wenn Ich entferne die @ es funktioniert.

ich bemerkt, dass Sie dies tun können:

Yii::setAlias('@foobar', '@foo/bar'); 

... aber ich würde es vorziehen, sie in der App-Konfigurationsdatei zu setzen. Ist das nicht möglich? Wenn das so ist, wie?

+10

Diese Frage auf [meta] diskutiert wird (http://meta.stackoverflow.com/questions/287174/user-continuous-adds-wrong-tag) – rene

Antwort

6

In config Ordner erstellen Datei aliases.php. Und setzen diese:

Yii::setAlias('webroot', dirname(dirname(__DIR__)) . '/web'); 
Yii::setAlias('editor_lang_dir', '@webroot/scripts/sceditor/languages/'); 

In web Ordner in index.php Datei put: require(__DIR__ . '/../config/aliases.php');

Bevor:

(new yii\web\Application($config))->run();

Wenn echo in View-Datei auszuführen:

echo Yii::getAlias('@editor_lang_dir');

anzeigen wie folgt aus:

C:\OpenServer\domains\yii2_basic/web/scripts/sceditor/languages/

+0

Danke. Hinzufügen der 'require (__ DIR__. '/../ config/aliases.php');' zu index.php half mir .. –

1

@webroot alias ist an dieser Stelle nicht verfügbar ist, wird es während der Anwendung Bootstrap definiert:

https://github.com/yiisoft/yii2/blob/2.0.3/framework/web/Application.php#L60

keine Notwendigkeit, diese Alias ​​selbst zu definieren, Sie sollte einfach einen anderen verwenden:

'aliases' => [ 
    // Set the editor language dir 
    '@editor_lang_dir' => '@app/web/scripts/sceditor/languages/', 
], 
11

Yii2 Basisanwendung

innerhalb Konfigurationsdatei zu setzen, schreiben Sie diese innerhalb $ config Array

'aliases' => [ 
     '@name1' => 'path/to/path1', 
     '@name2' => 'path/to/path2', 
    ], 

Ref: http://www.yiiframework.com/doc-2.0/guide-structure-applications.html

Aber wie here erwähnt,

Der @yii alias definiert ist wenn Sie die Yii.php-Datei in Ihr Eingabeskript einfügen. Der Rest der Aliase wird im Anwendungskonstruktor definiert, wenn die Anwendungskonfiguration angewendet wird.

Wenn Sie vordefinierte Alias ​​verwenden müssen, eine Komponente schreiben und verknüpfen es in Config-Bootstrap-Array

namespace app\components; 


use Yii; 
use yii\base\Component; 


class Aliases extends Component 
{ 
    public function init() 
    { 
     Yii::setAlias('@editor_lang_dir', Yii::getAlias('@webroot').'/scripts/sceditor/languages/'); 
    } 
} 

und innerhalb Config-Datei, fügen Sie 'app \ components \ Aliases' Bootstrap Array

'bootstrap' => [ 
     'log',   
     'app\components\Aliases',   
], 
1

Um die @ vitalik_74 Antwort zu verbessern

können Sie es stattdessen in config/web.php platzieren (wenn Sie die grundlegende yii App verwenden, bin ich mir nicht sicher über die Hauptkonfigurationsdatei in der a dvance Version, aber das gleiche gilt, nur setzt die erfordert auf der Hauptkonfigurationsdatei), so dass es verkürzen wird:

require(__DIR__ . '/aliases.php'); 
+0

Ich bevorzuge diese Antwort, vor allem, wenn die neue Umgebung/Init-Skript von yii berücksichtigt. –