2012年10月9日火曜日

Zend Framework 2 でのモジュールの追加

Zend Framework 2 が正式にリリースされましたが、日本語ドキュメントが全くないため、とりあえずモジュールの追加・ルーティング・認証機能(Authentication)の実装までまとめます。

ベースはSkelton Applicationを使用しているので、 https://github.com/zendframework/ZendSkeletonApplication からダウンロードしてください。

まずはモジュールの追加(ここに追加されたモジュール名と一致するモジュールがmoduleディレクトリから読み込みまれます)

<?php
//config/application.config.php
return array(
    'modules' => array(
        'Application',
        'Auth', //モジュール名を追加
    ),
    'module_listener_options' => array(
        'config_glob_paths' => array(
            'config/autoload/{,*.}{global,local}.php',
        ),
        'module_paths' => array(
            './module',
            './vendor',
        ),
    ),
);


moduleディレクトリのなかに先ほど追加したモジュール名のディレクトリを作成し、その中にModule.phpを作成します。
また、モジュールディレクトリの中はModule.phpというファイルを除き、ある程度自由に配置出来ますが、今回は公式ドキュメントと同様に以下のようにディレクトリを配置します。また、この構造はフレームワークによって決められているものではないため、このように配置するための設定も書き込んでいくことになります。

Auth/
|-- Module.php
|-- config <= 設定ファイルのフォルダ
|-- src <= controller, model等を格納するフォルダ
`-- view <= viewファイルを格納するフォルダ


まずは Module.phpです
<?php
//module/Auth/Module.php

namespace Auth; //モジュール名を名前空間とする

class Module
{
        public function getAutoloaderConfig()
        {
                return  array(
                        //srcフォルダ(公式ドキュメントと同様にsrcフォルダ内にモジュール名のフォルダを作成し、その中をオートロードするように設定)
                        'Zend\Loader\StandardAutoloader' => array(
                                'namespaces' => array(
                                        __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
                                ),
                        ),
                );
        }


        public function getConfig()
        {
                //configファイルの配置
                return include __DIR__ . '/config/module.config.php';
        }
}

Module.phpで設定したconfigファイルに具体的な設定を書き込んでいきます。

<?php
//module/Auth/config/module.config.php
return array(
    //Controllerを利用可能にする
    'controllers' => array(
        'invokables' => array(
            'Auth\Controller\Auth' => 'Auth\Controller\AuthController'
        ),
    ),
    //viewフォルダを登録する
    'view_manager' => array(
        'template_path_stack' => array(
            'auth' => __DIR__ . '/../view',
        ),
    ),
);

ここまででフレームワークに上述したフォルダ構造を伝えきり、コントローラも1つ利用できるようになったと思います。

ここから、signupとloginページの作成に入ります。

まずはdomain.com/signupとdomain.com/loginというURLでアクセス出来るようルーティングの設定をします。
module.config.phpに追記します。

<?php
//module/Auth/config/module.config.php
return array(
    'controllers' => array(
        'invokables' => array(
            'Auth\Controller\Auth' => 'Auth\Controller\AuthController'
        ),
    ),
    //以下を追記
    'router' => array( 
        'routes' => array(
            'signup' => array( //自由にルーティング名を記述
                'type'  => 'literal', //ルーティングタイプ(完全一致で指定する場合はliteralと記述)
                'options' => array(
                    'route' => '/signup', //一致するURL
                    'defaults' => array(
                        'controller' => 'Auth\Controller\Auth', //Controller名
                        'action'     => 'signup', //アクション名
                    ),
                ),
            ),
            'login' => array( //同様
                'type'  => 'literal',
                'options' => array(
                    'route' => '/login',
                    'defaults' => array(
                        'controller' => 'Auth\Controller\Auth',
                        'action'     => 'login',
                    ),
                ),
            ),
        ),
    ),
    //ここまで
    'view_manager' => array(
        'template_path_stack' => array(
            'auth' => __DIR__ . '/../view',
        ),
    ),
);

この状態でルーティングが機能するため、以下の指定されたコントローラーのメソッド(アクション)が呼び出されます。上記で利用を宣言したコントローラーを作成し、以下のように記述


<?php
//module/Auth/src/Auth/Controller/AuthController.php

namespace Auth\Controller;

use Zend\Mvc\Controller\AbstractActionController;

class AuthController extends AbstractActionController
{

    public function signupAction()
    {

    }

    public function loginAction()
    {

    }
}

メソッドを実装すれば、あとはviewファイルを作成することでとりあえずアクセスできるようになります。

<?php
//module/Auth/view/auth/auth/login.phtml, module/Auth/view/auth/auth/signup.php
ehcho 'hello zf2!';

これでdomain.com/signup, domain.com/loginにアクセスし、ビューファイルの内容を表示できると思います。

続いてログイン機能の実装です。少し長くなったのでページを改めます。

0 件のコメント:

コメントを投稿