『CakePHP』で読んだ本メモを作る 〜2〜 全画面共通のログイン情報項目を作る

はてな認証でログインした後、全画面でそのログイン情報が表示されるようにしてみる。

layoutとかrenderをアレコレするんだっけ、と思いながら調べていたら、ちょうどよさそうな書き込みやエントリがあったのでを参考にさせていただきました。


コントローラにログイン、非ログイン時の処理を書いて、それをテンプレートからrequestActionで呼び出すというやり方らしい。なるほど。

コントローラにログイン情報に関する処理を書く

  • APP/controllers/login_controller.php
function userinfo()
{
	if($this->Session->read('user'))
	{
		$this->set('user', $this->Session->read('user'));
		$this->render('../elements/info_user');
	}
	else
	{
		$this->render('../elements/info_guest');
	}
}

userinfoに対する userinfo.thtml は空っぽのファイルで一応用意しておいた。

ログインユーザー、ゲスト用のビューを書く

  • APP/views/elements/info_user.thtml
<div id="menu_info">
<p><?php echo $html->image($user['image'], array('alt' => h($user['name']), 'align' => 'absmiddle')) ?><?php echo h($user['name']) ?> | <?php echo $html->link('ログアウト', FULL_BASE_URL.'/logout')?></p>
</div>
  • APP/views/elements/info_guest.thtml
<div id="menu_info">
<p><?php echo $html->link('ログイン', FULL_BASE_URL.'/login/')?></p>
</div>

HTMLヘルパーを使って書くと普通に HTML を書くよりも長くなるのが微妙すぎる。
使う意味がない気がしてきた。

表示する場所を決める

ログイン情報を表示したい場所を指定する。
まずは、デフォルトのテンプレートをコピー。

  • コピー元: CAKE/libs/view/layouts/default.ctp
  • コピー先: APP/view/layouts/default.ctp

コピーした default.ctp を開いて、共通表示のテンプレートを保存した場所に以下のように書く。

<?php echo $this->requestAction('/login/userinfo', array('return')); ?>

requestAction がどういうものなのかわからなかったので以下で確認した。