Laravel3 を WebMatrix3 で開発しロリポップで公開する no.18 【マイメニューを拡張】

段々と機能が揃って参りました。そこで今回は、会員がログイン直後にかならず訪れるマイページをもう少し強化してみましょう。

まずは昨日だけ用意されてリンクが貼られていなかったので、ナビゲーションに加えることにします。それに伴い、mypage.blade.php がナビゲーションを表示していたのを、 general.blade.php に移動しました。ついでにアカウント情報へのリンクも追加しました。まずはパスワード変更が出来るようにするつもりです。

まずは mypage.blade.php の内容から。

@layout(\'templates.general\')

@section(\'contents\')
            <div class=\"header\">
	            ようこそ、○○○○○○○さん!<br />
            </div>

            <div class=\"content\">
	            <h1>マイページ</h1>
	            <p>ここはマイページです!</p>
            </div>
@endsection

つづいて general.blade.php 。

<!DOCTYPE html>
<html lang=\"{{Config::get(\'application.language\')}}\">
    <head>
        <meta charset=\"utf-8\" />
        <meta name=\"viewport\" content=\"width=device-width, minimum-scale=1, maximum-scale=1\" />
        <title>@yield(\'title\')</title>
        {{ Asset::styles() }}
        {{ Asset::scripts() }}

    </head>
    <body>
        <header>
            <nav>
                <ul>
                    <li>{{ HTML::link(\'mypage\', \'マイページ\') }}</li>
                    <li>Menu2</li>
                    <li>Menu3</li>
                    <li>{{ HTML::link(\'account\', \'アカウント\') }}</li>
                    <li>{{ HTML::link(\'logout\', \'ログアウト\') }}</li>
                </ul>
            </nav>
        </header>

        <section>
@yield(\'contents\')
        </section>
    </body>
</html>

ナビゲーションの構成上、会員向けページの雛形テンプレートにすることにします。ログアウト機能は既に routes.php に実装済みですので、リンクを張るだけで OK です。アカウント情報はこれから作る予定です。

ここから会員向けコンテンツ。つまり、ログイン中のユーザのみに表示するコンテンツが増えていきそうです。それらのコンテンツで必ず行われる、認証フィルターを実行する基底クラスを作成しておきましょう。 controllers 配下に member.php を作成し、mypage.php コントローラのコンストラクタを移植します。

<?php

class Member_Controller extends Base_Controller {

    public function __construct()
    {
        parent::__construct();
        $this->filter(\'before\', \'auth\');
    }
}

では早速 mypage.php コントローラで、この規定コントローラを使用するように変更してみましょう。

<?php
    
class Mypage_Controller extends Member_Controller
{

    public function action_index()
    {
        Asset::add(\'narrow-css\', \'css/narrow.css\', \'main\', array(\'media\' => \'screen and (max-width: 700px)\'));
        Asset::add(\'medium-css\', \'css/medium.css\', \'main\', array(\'media\' => \'screen and (min-width: 701px)\'));
        Asset::add(\'jquery\', \'js/jquery-1.10.0.js\', \'jquery-ui\');
        return View::make(\'mypage\');
    }
}

継承元を変更し、コンストラクタを削除しました。

ただ、このままだとルーティングの通ってない member.php はオートロードされず、かといって基底目的で作成したコントローラに対してルーティングするわけにもいきません。よって、明示的にローダーに登録する必要があります。 start.php に既に base.php コントローラがオートローダにマップされていますので、この配列に、 member.php を登録しましょう。

Autoloader::map(array(
	\'Base_Controller\' => path(\'app\').\'controllers/base.php\',
	\'Member_Controller\' => path(\'app\').\'controllers/member.php\',
));

これで読み込まれるようになります。

それではアカウント情報のページを作成しましょう。表示する以外の機能を実装する予定は今のところないので、 routes.php に直接実装しました。追加した内容は以下の通りです。

Route::get(\'account\', array(\'before\' => \'auth\', \'do\' => function()
{
    Asset::add(\'narrow-css\', \'css/narrow.css\', \'main\', array(\'media\' => \'screen and (max-width: 700px)\'));
    Asset::add(\'medium-css\', \'css/medium.css\', \'main\', array(\'media\' => \'screen and (min-width: 701px)\'));
    Asset::add(\'jquery\', \'js/jquery-1.10.0.js\', \'jquery-ui\');
    return View::make(\'account.index\');
}));

views 以下に account ディレクトリを作成し、 index.blade.php を作成します。

@layout(\'templates.general\')

@section(\'contents\')
            <div class=\"content\">
                <h2>アカウント情報</h2>
	            <ul>
                    <li>{{ HTML::link(\'account/password\', \'パスワード変更\')}}</li>
                </ul>
            </div>
@endsection

mypage.blade.php と同じ templates/general.blade.php を使用しています。アカウント情報で行いたい内容が思いつかなかったので、とりあえずパスワードの変更機能へのリンクを貼っておくことにします。この機能もまだ用意してないので、次回はこの機能を作成していきます。

それでは今回はここまで。

カテゴリー: Laravel3, Web, WebMatrix, ロリポップ タグ: , パーマリンク

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です