zend3mvc文档汉化

Posted 71 months ago php zend3

快速开始

现在您已经了解了应用程序、模块以及它们是如何构造的,我们将向您展示入门的简单方法。

安装在Zend支架的应用

安装Zend骨架应用最简单的方式开始安装骨架应用composer。 如果你还没有这样做,安装composer。

这里

debian
sudo apt install composer
fedora
sudo dnf install composer

安装好后,修改成中国源

composer config -g repo.packagist composer
 https://packagist.phpcomposer.com

在命令行中运行命令安装脚手架

$ composer create-project -sdev 
zendframework/skeleton-application my-application

创建一个新模块

默认情况下,一个模块提供的zendskeletonapplication,命名为“application”。

它提供了一个控制器来处理应用程序的"index”、布局模板和404个错误页面的模板。

通常,除了为站点和/或交替错误页提供一个备用条目页外,您不需要触摸其他内容。

通过创建新的模块将提供额外的功能。

你开始的模块,我们建议使用zendskeletonmodule为基础。从这里下载它:

https://github.com/zendframework/ZendSkeletonModule/

重命名目录“ZendSkeletonModule”成为的是你想创建新的模块的名称;

完成后,将模块放入你的新项目的模块目录。

更新模块类

让我们更新模块类。 我们要确保命名空间是正确的,配置启用并返回,而我们设置自动初始化。 我们可能想在我们的自动载入的方法是相当宽松的, 所以让我们用standardautoloader保持灵活。开始吧.


// autoload_classmap.php
return array();
return array(
    'view_manager' => array(
        'template_path_stack' => array(
            'module-name' => __DIR__ . '/../view'
        ),
    ),
);

用小写填写** 模块 ** 名称,破折号分开你的模块名称版本;例如,“ZendUser”将成为"zend-user”。

接下来,编辑的 ** module.php **文件命名空间声明。替换以下行:

namespace ZendSkeletonModule;

使用要为应用程序使用的命名空间。

接下来,重命名目录 src/zendskeletonmodule 为 src/要添加的模块名

和目录 view/zend-skeleton-module 为 src/模块名.

此时,您现在已经正确配置了模块。让我们创建控制器!

创建一个控制器

控制器对象实现 ** Zend\Stdlib\DispatchableInterface **

这意味着他们需要实现 ** dispatch() ** 以最小请求对象作为参数的方法。

然而,实际上,这意味着在每个控制器中基于匹配路由来编写逻辑分支。因此,我们已经为您创建了几个基本控制器类:

要开始, 我们将创建一个 “hello 世界”-风格的控制器, 一个单一的动作。

首先, 在目录 src/module name/Controller中创建文件 HelloController.php。

在您喜爱的文本编辑器或 ide 中编辑它, 并插入以下内容:

namespace module name\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(['message' => $message]);
    }
}

以上代码里做什么?

我们返回一个 viewmodel。视图层将在呈现视图时使用它, 从中抽取变量和模板名称。默认情况下, 可以省略模板名称, 它将解析为 “小写-模块名称/小写-控制器名称/小写-操作-名称”。但是, 您可以重写此项以在 viewmodel 实例上调用 setTemplate () 来指定不同的东西。通常, 模板将解析为模块的视图目录中带有 “. phtml” 后缀的文件。

因此, 考虑到这一点, 让我们创建一个视图脚本。

创建视图脚本

创建目录view/module-name/hello。在该目录中, 创建一个名为 “world.phtml” 的文件,并在这里面, 粘贴以下内容:

 echo $this->escapeHtml($message)

这样就成。保存文件。

转义输出 escapeHtml () 的方法是什么?它实际上是一个视图帮助器, 它旨在帮助减轻 xss 攻击。不信任用户输入;如果您在视图脚本中对给定变量的源完全不确定, 请根据您拥有的数据类型, 使用提供的转义视图助手之一来转义它。

使用命名空间查看模块名称的脚本

根据 PSR-0, 模块应按照以下规则命名:

Vendor Name\Namespace \ *

从版本3.0 开始, 默认的模板名称解析器使用完全限定的控制器类名, 仅剥离 \Controller\ subnamespace (如果存在)。例如, AwesomeMe \n MyModule \ Controller \ HelloWorldController 通过以下配置解析到模板名称wesome-me/my-module/hello-world :

一下是配置

'view_manager' => array(
    'controller_map' => array(
        'AwesomeMe\MyModule' => true,
    ),
),

(在 v2 版本中, 默认为剥离空间, 但可选的映射规则允许在模块配置中名单命名空间以启用当前的冲突解决程序行为。有关详细信息, 请参阅迁移指南。

创建路由

现在, 我们有了一个控制器和一个视图脚本, 我们需要创建一个路由到它。

默认路由

  • module-specific-root使用模块特定的根路径。
  • ZendSkeletonModule\ControllerYourModuleName\Controller

此外, 我们需要告诉应用程序, 我们有一个控制器:

// module.config.php
return [
    'controllers' => [
        'invokables' => [
            'module-namespace\Controller\Index' => 'module-namespace\Controller\IndexController',
            // Do similar for each other controller in your module
        ],
    ],
   // ... other configuration ...
];

控制器服务 我们通知应用程序, 我们期望在应用程序的控制器。这是为了防止有人请求任何服务的 ServiceManager 知道在试图打破应用程序。调度器使用一个特殊的、作用域的容器, 它只会将特定注册的控制器作为可类或通过工厂进行。

打开您的config/module.config.php文件, 并将其修改为添加到 “路由” 和 “控制器” 参数, 以便它读取如下内容:

return [
    'router' => [
        'routes' => [
            'module name-hello-world' => [
                'type'    => 'Literal',
                    'options' => [
                    'route' => '/hello/world',
                    'defaults' => [
                        'controller' => 'module name\Controller\Hello',
                        'action'     => 'world',
                    ],
                ],
            ],
        ],
    ],
    'controllers' => [
        'invokables' => [
            'module namespace\Controller\Hello' => 'module
namespace\Controller\HelloController',
        ],
    ],
    // ... other configuration ...
];

告诉应用程序关于我们的模块

一个问题: 我们还没有告诉我们的新模块的应用!

默认情况下, 除非我们告诉模块管理器有关它们, 否则不会使用模块。因此, 我们需要通知应用程序有关它们的信息。

请记住config/application.config.php 文件。让我们修改它添加我们的新模块。一旦完成, 应改为:

return array(
    'modules' => array(
        'Application',
        'module namespace',
    ),
    'module_listener_options' => array(
        'module_paths' => array(
            './module',
            './vendor',
        ),
    ),
);

module namespace 替换为模块的命名空间。

访问 现在更改 url 为"/hello/world"

原文链接 (zhenruyan译)

点击评论