2011-02-02 20 views
3

Viewから使用済みコントローラの名前を要求できないのはなぜですか?

例えば、someview.phpが含まれています

<?php echo Request::$controller; ?>

Kohanaのがエラーを示しています「ErrorException [致命的なエラー]:宣言されていない静的プロパティへのアクセス:リクエスト:: $コントローラは、」

なぜ?どうしましたか?それは、これを行うために私のために必要とされる

<?php if (Request::$controller != 'index') { ?> <a href="/">Example.com</a> <?php } else { ?> Example.com <?php } ?>

答えて

4

は、コントローラ上で、代わりにこれを行います。

View::bind_global('controller', $this->request->param('controller')); 

を次に、あなたが任意のビューに$controllerにアクセスすることができます。

+0

答えてくれてありがとう、よだ!これは私の場合の唯一の正しい解決策ですか? – Azat

+0

ビューで直接オブジェクトを呼び出すはずなので、そうです。それでも、さまざまな方法がありますが、各ビューに常に変数を設定することになります。これはグローバルな作業で、余分な作業を必要としません。 – yoda

+0

残念ながら、あなたが言ったように 'bind_global'を使用しようとすると、Kohanaは次のように言います:" ErrorException [Strict]:変数だけが参照渡しであるべきです "。 'bind_global'の代わりに' set_global'を使うと '$ controller'変数は常に空になります。 – Azat

1

yodaが示唆するように私はやっていますが、私はおそらくそのロジックもコントローラに入れています。

あなたは家に帰ると思いますか?

$link = (Request::$controller != 'index') ? '<a href="/">Example.com</a>' : 'Home'; 
$this->template->set_global('homeLink', $link); 

あなたはRoute::get()やその友人のいずれかを使用して、ルートからのリンクを構築することができ、あまりにも忘れないでください。

+0

ええ、私は、ユーザーがサイトのルートページにすでに留まっている場合、サイトのルートページへのリンクが表示されないようにします。ルートページへのリンクは、ユーザーがサイトの別のページにいる場合にのみ表示する必要があります。 – Azat

+0

それでも "宣言されていない静的プロパティへのアクセス:Request :: $ controller"と書かれています:(他の場所で何か間違っているかもしれません) – Azat

+1

@Azatコントローラのコンテキストにいますか? '$ this-> request-> controller '。 – alex

3

リクエストは静的メソッドでアクセスする必要があります。追加の静的プロパティを定義する必要はありません。それを得るためにグローバルな視野が必要です。

Request::instance()は、メインリクエストインスタンス( 'mother instance')を返します。 Request::current()は、コントローラで$this->requestを使用してアクセスできるものと同じ、現在アクティブなリクエストのインスタンスを返します。

<? if (Request::current()->controller !== 'index') : ?> 

    <a href="<?= URL::site() ?>">Example.com</a> 

<? else : ?> 

    Example.com 

<? endif; ?> 
+0

すばらしい、ケモ。これが私の必要なものです。私の場合、これが最善の解決策であることを願っています。 – Azat

+0

これは唯一の正しい解決策です(表示するコントローラーを過度に過ごすため、そうです)。 – Kemo

+0

複数のリクエストがある場合は、全くありません。また、その情報が必要なたびにメソッドを呼び出すのではなく、変数を持つ方がよいでしょう。 – yoda

0
Kohanaの3.1では

<? if (Request::current()->controller !== 'index') : ?> 

与える "ErrorException [お知らせ]:未定義のプロパティ:リクエスト:: $コントローラを"。次に私は単純にRequest :: current() - > controller()を使用して、受け入れ可能な/ベストプラクティス/最適なパフォーマンスで表示しますか?

<? if (Request::current()->controller() !== 'index') : ?> 

    <a href="<?= URL::site() ?>">Example.com</a> 

<? else : ?> 

    Example.com 

<? endif; ?> 
0

Kohanaの3.2:

:コントローラでは、この(私はあなたがbind_globalを使用することができないこと、それは本当に愚か見つける。)

View::set_global('controller', $this->request->current()->controller()); 

次にビューで、あなたが使用することができますを貼り付け

echo ($controller);