0

ZF2 で使用される基本的なサンプル アプリケーションでは、IndexController は次のようにコーディングされます。

namespace Application\Controller;

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

class IndexController extends AbstractActionController
{
    public function indexAction()
    {
        return new ViewModel();
    }
}

単純な return ステートメントがあるだけで、の内容index.phtmlが自動的に出力に含まれます。

index.phtml参照されているのを見た唯一の場所は\module\Application\config\module.config.php

'view_manager' => array(
        'display_not_found_reason' => true,
        'display_exceptions'       => true,
        'doctype'                  => 'HTML5',
        'not_found_template'       => 'error/404',
        'exception_template'       => 'error/index',
        'template_map' => array(
            'layout/layout'           => __DIR__ . '/../view/layout/layout.phtml',
            'application/index/index' => __DIR__ . '/../view/application/index/index.phtml',
            'error/404'               => __DIR__ . '/../view/error/404.phtml',
            'error/index'             => __DIR__ . '/../view/error/index.phtml',
        ),
        'template_path_stack' => array(
            __DIR__ . '/../view',
        ),
    ),

この行をコメントアウトしてみました:

//'application/index/index' => __DIR__ . '/../view/application/index/index.phtml',

しかし、index.phtml はまだ出力に含まれています。

それで問題は、なぜそれが含まれているのですか?舞台裏でどのような魔法が起こって、まだ含まれているのでしょうか?

ドキュメントで見つけることができなかった、ZF2 によって処理されるいくつかの基本的な自動マッピングが欠落しているように思えます。しかし、自動マッピングがある場合、なぜその行が に存在するのmodule.config.phpでしょうか?

4

1 に答える 1

1

したがって、冗長性があることがわかりますmodule.config.php

'view_manager' => array(
        'display_not_found_reason' => true,
        'display_exceptions'       => true,
        'doctype'                  => 'HTML5',
        'not_found_template'       => 'error/404',
        'exception_template'       => 'error/index',
        'template_map' => array(
            'layout/layout'           => __DIR__ . '/../view/layout/layout.phtml',
            'application/index/index' => __DIR__ . '/../view/application/index/index.phtml',
            'error/404'               => __DIR__ . '/../view/error/404.phtml',
            'error/index'             => __DIR__ . '/../view/error/index.phtml',
        ),
        'template_path_stack' => array(
            __DIR__ . '/../view',
        ),
    ),

この行は静的マッピングです。

'application/index/index' => __DIR__ . '/../view/application/index/index.phtml',

これらの行は動的マッピングです。

'template_path_stack' => array(
    __DIR__ . '/../view',
),

このページの使用法セクションで、それが明確になりました。 http://framework.zend.com/manual/2.0/en/modules/zend.view.quick-start.html

パフォーマンスのために可能な場合は静的マッピングを使用し、動的マッピングにフェイルオーバーします。両方をコメントアウトすると、実際にはエラーが発生し、ViewModel() は含めるページを見つけることができません。

Fatal error: Uncaught exception 'Zend\View\Exception\RuntimeException' with message 'Zend\View\Renderer\PhpRenderer::render: Unable to render template "application/index/index"; resolver could not resolve to a file'

于 2013-01-14T17:13:58.687 に答える