私の Web サイトには、すべてのページに表示される「ログイン プロンプト」があります。テンプレート システムを使用しているため、このログイン プロンプトは各ページのヘッダーに表示されます。
ユーザーがログインすると、ユーザー名とログアウトへのリンクが表示されます。ログインしていない場合は、ログインまたは登録へのリンクが表示されます。
MY_Controller に、ページの読み込みごとにユーザーがログインしているかどうかを確認する関数がありますが、これは正常に機能します。
if($this->is_logged_in()) {
$this->username = $this->session->userdata('username');
$data['login_prompt'] = "Hi, " . $this->username . " " . anchor("account/logout", "Logout");
}
そして、私の header.php (ビュー) には次のものがあります。
<div id="login-prompt" class="transparent">
<?php
if (!isset($login_prompt)) $login_prompt = anchor("account/login", "Login") . " or " . anchor("account/register", "register");
echo $login_prompt;
?>
</div>
問題は私のコントローラーにあります。MY_Controller を拡張する ucp.php のコンストラクターを次に示します。
public $data;
function __construct()
{
parent::__construct();
$data['login_prompt'] = $this->data['login_prompt'];
}
$data['login_prompt']
ビューに渡すことができるように、コントローラーの各メソッドで利用できるようにしたいと思います。ただし、印刷$data['login_prompt']
するとエラーが発生'undefined index'
し、その結果、header.php で定義されているデフォルトの「ログインまたは登録」メッセージが常に表示されます。
ucp.php の典型的なメソッドは次のようになります。
function index()
{
$this->template->build("ucp/ucp_view", $data);
}
ご覧のとおり、$data
配列をビューに渡す必要があります。$data['login_prompt']
コンストラクターではなく、メソッド自体で次のように定義するとします。
function index()
{
$data['login_prompt'] = $this->data['login_prompt'];
$this->template->build("ucp/ucp_view", $data);
}
ログイン プロンプトが正しいログイン メッセージに変わります。ただし、アプリケーションのすべてのコントローラーのすべてのメソッドにこの行を追加したくありません。
私が見つけた同様の問題は$data
、ビューに渡された配列をここ$this->data
で概説されている に変更するだけです。これは機能しますが、アプリケーションの他のいくつかの部分が壊れます。
間違いは本当に明白なものだと思います。私は何を間違っていますか?