2017-10-26 11 views
0

はので、私はhttp://www.yiiframework.com/doc-2.0/guide-output-theming.html以下、この構造のフロントエンド/ウェブ/テーマ/ myTheme
を作成した私は、フロントエンド/設定/メインにこのコードを追加しました。 PHPYii2高度変更ビューのデフォルトパス(テーマ)

'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」ビューファイルが存在しないというエラーを取得保管???

私もそう私の質問があるHow to change default view path in Yii2?

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

に基づいて、コントローラ内部でこの機能を入れてみました: 1.どのように私はビューのデフォルトのパスを変更できますか? 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

私はあなたがこれを試してみてください共通/ configに に間違ったfile.Don't configureコンテーマを設定していると思う: におけるフロントエンド/設定/ main.php

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

バックエンドを設定する必要がある場合は、バックエンド/ config/main.php

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

共通フォルダが フロントエンドとバックエンドの両方で必要なファイルが含まれている必要があります。 これが役立つことを願っています。

+0

私は実際にフロントエンドを使用していません – leila

0

最初の質問:

私は、高度なアプリケーションを使用するときに、Yiiの中によくある間違いを持っ​​ているよりも思う:フロントエンドバックエンド、または共通のエイリアス@app参照のルートディレクトリどこに応じて、 View documentation hereからアクセスしてください。 ovickoが提案したソリューションを使用しました。あなたは、ビューオブジェクトを介してコントローラに動的にテーマ設定を変更することができます

2番目の質問

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

EDIT Documentationによると:

テーマ設定がへの道であります元のビューレンダリングコードに触れることなくビューのセットを別のビューに置き換える。

元の表示ファイルは、でなければならず、テーマはレンダリング時に置き換えられます。したがって、/ var/www/html/myProject/app/frontend/views/site/indexにファイルを作成する必要があります。PHPを(空のファイルが有効です)テーマの作品に有効です。 これはかなりばかげて聞こえる、私は知っているが、それは動作する。

しかし、私はそれは、再び、あなたのコントローラでdinamicallyレイアウトを変更するdifferents layoutsの使用より良い、より簡単だと思う:

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

giiでアプリケーションを使用してファイルを生成する際に問題が発生しましたので、代わりにフォルダ名を使用することをお勧めします。 – ovicko

+0

目、私も。それははるかによく、あまり紛らわしい使用フォルダ名です。特に4つ以上のルートフォルダを持つプロジェクトがある場合。 – hesselek

関連する問題