-2

Kohana を使用してサイトの管理セクションに取り組んでいます。ビューフォルダー内に「admin」サブフォルダーを作成して、管理ビューを保存しました。また、次のように、Admin Template Controller と呼ばれる管理セクション用の Template Controller の変更されたインスタンスを使用しています。

abstract class Admin_Template_Controller extends Template_Controller
{
    public $template = 'admin/template';

    public function __construct()
        {
            parent::__construct();

            $this->template = View::set_filename($this->template);
            $this->template->css = 'adminstyles';
            $this->template->js  = 'html5';
        }
}

ただし、「admin/template」ファイル内で css 変数が定義されていないというエラーが表示されます。この時点で、テンプレート ファイルは、フロント エンドの大部分を作成するために使用したビュー フォルダー内のテンプレート ファイルと同じであるため、そこにはありません。また、注意すべき重要な事実として、ビュー フォルダー (フロント エンド用) のテンプレート ファイルを使用すると、ページが正しく読み込まれます。

これにより、サブフォルダーにあるテンプレート ファイルに関係があると思われます。同じ「views/admin」フォルダーから別のビューファイルを正常にロードしたため、それは私を困惑させます。ただし、そのファイルには変数が含まれていないため、おそらくそれがロードされる理由です。

私はもう試した

 $this->template = View::factory($this->template);

新しいテンプレート ファイルもロードしますが、レンダリングの前にビューを呼び出す必要があるというエラーが返されます。自動レンダリングがオンになっているためだと思いますが、オンにしたいです。

どんなアイデアでも大きな助けになります。もちろん、ファイルを admin フォルダーから移動して名前を変更することもできますが、実際には何が起こっているのかを知るのに役立ちません。

4

3 に答える 3

2

削除したこの行:

$this->template = View::set_filename($this->template);

set_filename()は静的メソッドではないため、これを壊していました。メソッドはそれ自体を返すため、そのメソッドはビューの既存のインスタンスで呼び出す必要があります(メソッドの連鎖に役立ちます)。ただし、parent :: _construct()で呼び出しているコンストラクターでテンプレートビューを作成するTemplate_Controllerクラスを拡張しているため、最初からこれを行う必要はありません。

set_filename()メソッドを使用する必要があるのは、既存のテンプレートオブジェクトがあるが、まったく新しいオブジェクトを再作成せずに、それに関連付けられているビューを変更したい場合だけです。

最後に、auto_renderオプションは、コントローラーが終了したときにビューをレンダリングするポストコントローラーフックをトリガーします。これは、コントローラークラスのメソッド内のコードには影響しません。

于 2009-12-08T03:45:26.143 に答える
0

私は自分の質問に対する答えを見つけました。この線:

$this->template = View::set_filename($this->template);

削除する必要があります。たぶん、テンプレートを再度ロードして、変数をキャンセルします。正確にはわかりません。ただし、拡張する Template Controller で既に定義されているテンプレート ファイル名を変更するには、その行が必要であると考えました。Kohanaフォーラムでそれを正しく読んだと思いました. ないと思います。うまくいけば、これは他の誰かに役立ちます。

于 2009-12-08T03:05:07.637 に答える
0

ビューのサブフォルダーには、サブフォルダー内のビューを制御するコントローラーとまったく同じ名前を付ける必要があります。

于 2011-03-26T11:32:24.783 に答える