前回はモジュールを追加したが、最低限のことしか行っていないため、もう少し手を加えてみる。
そこで公式ページの Mvc の Quick Start にある HelloController を作ってみる。

やはり今回もモジュールの雛形 ZendSkeletonModule から出発する。GitHub のサイトからダウンロードし、これを解凍、フォルダ名を HelloWorld とリネームし、前回配置した ZendSkeletonApplication の module フォルダ内に配置する。このあたりは前回を参照のこと。フォルダの階層は以下のようになる。
C:\xampp\htdocs\ZendSkeletonApplication\module\HelloWorld


ZendSkeletonApplication の下の configにある application.config.php も前回と同様に書き換える。連想配列の 'modules' に 'HelloWorld' を追加しただけである。
<?php
return array(
    // This should be an array of module namespaces used in the application.
    'modules' => array(
        'Application',
        'ZendSkeletonModule',
        'HelloWorld',
    ),

    // These are various options for the listeners attached to the ModuleManager
    'module_listener_options' => array(
         :
         :

今回はモジュール名を変えるので、変更する箇所が増える。モジュール名、ネームスペースは HelloWorld とする。まずはこれらを変更する。

・Module.php 内の namespace 指定を HelloWorld に変更
・src フォルダ内の ZendSkeletonModule を HelloWorld にリネーム
・view フォルダ内の zend-skeleton-module を hello-world にリネーム

次に、コントローラを作成する。内容は公式ページの Quick Start にある HelloController をコピペする。その際、namespace のモジュール名の部分は HelloWorld に書き換えること。作成するファイルと内容は以下のとおり。
C:\xampp\htdocs\ZendSkeletonApplication\module\HelloWorld\src\HelloWorld\Controller\HelloController.php

<?php
namespace HelloWorld\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;

class HelloController extends AbstractActionController
{
    public function worldAction()
    {
        $message = $this->params()->fromQuery('message', 'foo');
        return new ViewModel(array('message' => $message));
    }
}
以下のとおりになる。なお、元々あった SkeletonContoller は削除して構わない。

次に、ビューを作成する。こちらも内容は公式ページの Quick Start にある内容をコピペする。作成するファイルと内容は以下のとおり。
C:\xampp\htdocs\ZendSkeletonApplication\module\HelloWorld\view\hello-world\hello\world.phtml

<h1>Greetings!</h1>
 
<p>You said "<?php echo $this->escapeHtml($message) ?>".</p>
元々あった index.phtml、foo.phtml は削除して構わない。


最後に config フォルダにある module.config.php を書き換える。変更内を列挙する。
・ZendSkeletonModule を HelloWorld に変更(4箇所)
・Skeleton を Helloに変更(2箇所)
・SkeletonController を HelloController に変更
・module-name-here を helloworld に変更
・route の指定を /module-specific-root から /hello/world に変更
・action の指定を index から world に変更

変更後は以下のようになると思う。
<?php
return array(
    'controllers' => array(
        'invokables' => array(
            'HelloWorld\Controller\Hello' => 'HelloWorld\Controller\HelloController',
        ),
    ),
    'router' => array(
        'routes' => array(
            'helloworld' => array(
                'type'    => 'Literal',
                'options' => array(
                    // Change this to something specific to your module
                    'route'    => '/hello/world',
                    'defaults' => array(
                        // Change this value to reflect the namespace in which
                        // the controllers for your module are found
                        '__NAMESPACE__' => 'HelloWorld\Controller',
                        'controller'    => 'Hello',
                        'action'        => 'world',
                    ),
                ),
                'may_terminate' => true,
                'child_routes' => array(
                    // This route is a sane default when developing a module;
                    // as you solidify the routes for your module, however,
                    // you may want to remove it and replace it with more
                    // specific routes.
                    'default' => array(
                        'type'    => 'Segment',
                        'options' => array(
                            'route'    => '/[:controller[/:action]]',
                            'constraints' => array(
                                'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                                'action'     => '[a-zA-Z][a-zA-Z0-9_-]*',
                            ),
                            'defaults' => array(
                            ),
                        ),
                    ),
                ),
            ),
        ),
    ),
    'view_manager' => array(
        'template_path_stack' => array(
            'HelloWorld' => __DIR__ . '/../view',
        ),
    ),
);
以上で、準備は整ったので、ブラウザで次のURLにアクセスしてみる。

http://localhost/ZendSkeletonApplication/public/hello/world/


正常に実行できた場合は以下のような画面が表示される。
zendframework2-4

HelloController は message パラメータを受け取り、ビューに渡すようになっているが、その動作を確認するため message パラメータを指定してアクセスしてみる。
http://localhost/ZendSkeletonApplication/public/hello/world?message=bar

実行結果は以下のようになるはずである。 zendframework2-5

以上。