2017-12-21 1 views
0

비슷한 질문을 보았지만 제대로 된 해결책을 찾지 못했습니다. 여기 내 index.php 파일입니다 :Yii2. 잘못된 경로 별칭

<?php 

// comment out the following two lines when deployed to production 
defined('YII_DEBUG') or define('YII_DEBUG', true); 
defined('YII_ENV') or define('YII_ENV', 'dev'); 

require(__DIR__ . '/../vendor/autoload.php'); 
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); 

$config = require(__DIR__ . '/../config/web.php'); 

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

require(__DIR__ . '/../config/aliases.php'); 

당신이 볼 수 있듯이, 그것은 내용이 있습니다 config/aliases.php 파일이 필요합니다

<?php 

Yii::setAlias('message_files_root', '@webroot/message_files'); 
Yii::setAlias('message_files', '@web/message_files'); 

호출 Yii::getAlias('@message_files_root')index.php 내에서 잘 작동하지만 그것은에있을 때 컨트롤러 파일은 Invalid path alias: @message_files_root입니다. 여기

내 컨트롤러의 동작 (나머지 코드가 완전히 주석)된다

public function actionIndex() 
{ 
    var_dump(Yii::getAlias('@message_files_root')); 

    $message = new Message(); 

답변

0

나는이 것을 할 수있는 가장 좋은 방법입니다 주장 아니지만, 그것은 내가 그것을 원하는 방식으로 작동 작업 - 별칭에 다른 별칭이 포함될 수있는 경우

<?php 

// comment out the following two lines when deployed to production 
defined('YII_DEBUG') or define('YII_DEBUG', true); 
defined('YII_ENV') or define('YII_ENV', 'dev'); 

require(__DIR__ . '/../vendor/autoload.php'); 
require(__DIR__ . '/../vendor/yiisoft/yii2/Yii.php'); 

$config = require(__DIR__ . '/../config/web.php'); 

$app = new class($config) extends yii\web\Application 
{ 
    protected function bootstrap() 
    { 
     parent::bootstrap(); 

     require(__DIR__ . '/../config/aliases.php'); 
    } 
}; 

$app->run(); 
0

당신이 컨트롤러에서 YII :: getAlias ​​() 정적 메서드를 호출 할 경우, YII :: setAlias ​​(@web)는 않습니다 아직 등록하지 마라. 웹/색인 파일을 참조 할 수 있습니다.

웹/index.php에

require(__DIR__ . '/../../vendor/autoload.php'); 
require(__DIR__ . '/../../vendor/yiisoft/yii2/Yii.php'); 
require(__DIR__ . '/../../common/config/bootstrap.php'); --> Yii::setAlias(@web) are not listed here 
require(__DIR__ . '/../config/bootstrap.php'); 

$config = yii\helpers\ArrayHelper::merge(
    require(__DIR__ . '/../../common/config/main.php'), 
    require(__DIR__ . '/../../common/config/main-local.php'), 
    require(__DIR__ . '/../config/main.php'), 
    require(__DIR__ . '/../config/main-local.php') 
); 

$application = new yii\web\Application($config); 
//var_dump(Yii::getAlias('@web'));die; --> imitate invoke @web alias fail 
$application->run(); --> here both @web alias and aliases from $config got registered. 
//var_dump(Yii::getAlias('@web'));die; --> imitate invoke @web alias success 

내 생각 엔이 설정은 기본 @web 별칭이 등록되기 전에 먼저 등록되었다입니다. 왜 bootrap config에서 @web 별칭을 불러오는 것이 실패하나요? 따라서 두 번째 매개 변수에 절대 경로를 사용해야합니다. 이것을 사용 ..

yii2 고급 템플릿

Yii::setAlias('@message_files_root', dirname(dirname(__DIR__)) . '/frontend/web/message_files'); 

yii2 기본 템플릿

Yii::setAlias('@message_files_root', dirname(__DIR__) . '/web/message_files'); 
+0

나는'aliases.php' 파일에 코드의 마지막 조각을 넣어 봤지만 다른 별명에 의존하지 않는 경우에도 그것이 아무 소용이 ... – Sector

+0

은'aliases.php'했다 'web/index.php'에 나열 되었습니까? – kidzen

+0

예, 그렇습니다. 문제는 이미 해결되었습니다. – Sector