2017-10-26 10 views
0

내가 자동으로 템플릿 을 변경하는 내 응용 프로그램에 대한 싶습니다 그래서 메인 프론트 엔드/설정 /에이 코드를 추가 http://www.yiiframework.com/doc-2.0/guide-output-theming.html 다음이 구조의 프론트 엔드/웹/테마/myTheme
를 만들었습니다. PHP Yii2 고급 변화 전망의 기본 경로 (테마)

'components' => [ 
     'view' => [ 
      'theme' => [ 
       'basePath' => '@app/themes/myTheme', 
       'baseUrl' => '@web/themes/myTheme', 
       'pathMap' => [ 
        '@app/views' => '@app/themes/myTheme', 
       ], 
      ], 
     ], 
    ], 

그러나 나는 "/var/www/html/myProject/app/frontend/views/site/index.php"뷰 파일이 존재하지 않는다는 오류가 계속 ??? 1. 어떻게 뷰의 기본 경로를 변경할 수 있습니다

는 나는 또한 나의 질문은 How to change default view path in Yii2?

public function getViewPath() 
{ 
    return Yii::getAlias('@web/themes/myTheme/site'); 
} 

에 따라 컨트롤러 내부에이 기능을 넣을려고? 2. 세션 중에 common/config/main.php 설정을 변경할 수 없으므로 어떻게 자동으로 할 수 있습니까?

사이트 컨트롤러

class SiteController extends Controller 
{ 
    public function behaviors() 
    { 
     return [ 
      'access' => [ 
       'class' => AccessControl::className(), 
       'rules' => [ 
        [ 
         'actions' => ['index'], 
         'allow' => true, 
         'roles' => ['?'], 
        ], 
        [ 
         'actions' => ['index'], 
         'allow' => true, 
         'roles' => ['@'], 
        ], 
       ], 
      ], 
     ]; 
    } 
    public function actions() 
    { 
     return [ 
      'error' => [ 
       'class' => 'yii\web\ErrorAction', 
      ], 
      'captcha' => [ 
       'class' => 'yii\captcha\CaptchaAction', 
       'fixedVerifyCode' => YII_ENV_TEST ? 'testme' : null, 
      ], 
     ]; 
    } 

    /** 
    * Displays homepage. 
    * 
    * @return mixed 
    */ 
    public function actionIndex() 
    { 
     $searchModel = new ProductSearch(); 
     $dataProvider = $searchModel->search(Yii::$app->request->queryParams); 

     return $this->render('index', [ 
      'searchModel' => $searchModel, 
      'dataProvider' => $dataProvider, 
     ]); 
    } 
} 
+0

당신이 저에게 당신의 컨트롤러를 게재 할 수 있습니까? – hesselek

+0

간단한 컨트롤러 – leila

답변

1

나는 당신이 시도 일반/설정 에서 잘못된 file.Don't의 구성 테마를 구성하는 생각 : 에서 프론트 엔드/설정/main.php

'components' => [ 
     'view' => [ 
      'theme' => [ 
       'pathMap' => [ 
        '@frontend/views'=>'@frontend/themes/myTheme', 
       ], 
      ], 
     ], 
    ], 

당신은 백엔드/설정/main.php

에서 다음 백엔드를 구성해야하는 경우 일반적인 폴더는 5,
'components' => [ 
      'view' => [ 
       'theme' => [ 
        'pathMap' => [ 
         '@backend/views'=>'@backend/themes/myTheme', 
        ], 
       ], 
      ], 
     ], 

는 프론트 엔드와 백엔드 모두에 필요한 파일을 포함한다. 희망이 도움이됩니다.

+0

실제로 프론트 엔드를 사용하지 않습니다 – leila

0

첫 번째 질문 :

나는 고급 응용 프로그램을 사용할 때 당신이 YII의 일반적인 실수를하는 것보다 생각 : 프론트 엔드, 백엔드, 또는 일반적인의 별칭 Google Play 무비 참조 루트 디렉토리가 어디를에 따라 View documentation here에서 액세스하십시오. ovicko가 제안한 솔루션을 사용했습니다.

두 번째 질문 :

$this->view->theme->pathMap =['@app/views' => '@app/themes/myTheme/',]; 

편집 따르면 Documentation에 :

당신은보기 개체를 통해 컨트롤러에 동적으로 테마 설정을 변경할 수 있습니다

주제 선정을하는 방법입니다 원래 뷰 렌더링 코드를 건드리지 않고도 뷰 세트를 다른 것으로 대체 .

원래보기 파일 이어야하며 렌더링하는 동안 테마가 대체된다는 것을 의미합니다. 따라서/var/www/html/myProject/app/frontend/views/site/index에 파일을 만들어야합니다.PHP는 (빈 파일이 유효합니다) 작품을 테마로합니다. 이것은 매우 우스꽝스럽게 들린다. 알아,하지만 작동한다.

하지만 그, 다시, 컨트롤러에 dinamically 레이아웃을 변경하는 differents layouts의 사용을 훨씬 더 쉽게 생각 :

$this->layout = 'route/yourlayout'; 
+0

gii를 사용하는 응용 프로그램을 사용하여 파일을 생성 할 때 문제가있어서 대신 폴더 이름을 사용하는 것이 좋습니다. – ovicko

+0

눈, 저도 요. 폴더 이름이 훨씬 낫고 덜 혼동 스럽습니다. 특히 경로 폴더가 4 개 이상인 프로젝트가있는 경우 – hesselek