zend-framework2zend-framework2入门


备注

Zend Framework 2(ZF2)是一个现代且灵活的PHP框架,可帮助Web开发人员构建不同复杂性的Web应用程序。 Zend Framework公司的主要赞助商是Zend Technologies ,它使其非常强大和稳定。与ZF1相比,第二个版本有两个主要的改进。首先,默认情况下采用基于模块的架构而不进行任何调整。在开发需要分解模块的大型Web应用程序时,这很方便。其次,ZF2实现了PHP5.3 +可以提供的所有功能,尤其是命名空间。在以前的版本中,控制器类的名称如下:

class IndexController extends Zend_Controller_Action
{

}

同样的类在ZF2中重写如下:

namespace Application\Controller;
use Zend\Mvc\Controller\AbstractActionController;

class IndexController extends AbstractActionController
{

}

以下是ZF2的一些其他令人兴奋的功能:

  • 依赖注入
  • 事件管理器
  • 服务经理

一个简单的Hello World

在命令行中,进入要在其中创建项目的目录,然后键入: composer create-project zendframework/skeleton-application helloWorldTest 。在安装过程中,系统会询问您是否需要进行最小程度的安装:暂时让我们说“是”,我们只是在测试。

为简单起见,我们将使用内置的PHP CLI服务器。从命令行,进入项目的根目录( helloWorldTest ),然后运行: php -S 0.0.0.0:8080 -t public/ public/index.php 。现在,打开Web浏览器并转到http:// localhost / ,您应该会看到ZF2 Skeleton Application的欢迎页面。

如果您这样做,我们现在将设置一个新页面。在module/Application/config/module.config.php 您可以看到已经为应用程序子文件夹设置了动态路由:

return [
    'router' => [
        'routes' => [
            'home' => [
                ...
            ],
            'application' => [
                'type'    => Segment::class,
                'options' => [
                    'route'    => '/application[/:action]',
                    'defaults' => [
                        'controller'    => Controller\IndexController::class,
                        'action'        => 'index',
                    ],
                ],
            ],
        ],
    ],
 

module/Applicaiton/src/Controller/IndexController.php 设置一个新动作“ helloWorldAction() ”:

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

最后,使用以下内容创建视图文件module/Application/view/application/index/hello-world.phtml

<?php
echo "Hello World !";
 

现在,转到http:// localhost / application / hello-world ,并向ZF2打个招呼!

如何创建工厂

当需要为类提供硬依赖时,最佳实践是使用构造函数注入模式,其中使用工厂注入这些依赖项。

让我们假设MyClass 很难依赖于需要从应用程序配置中解析的值$dependency

<?php
namespace Application\Folder;

use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;

class MyClass
{
    protected $dependency;

    public function __construct($dependency)
    { 
        $this->dependency = $dependency;
    }
}
 

要注入此依赖项,将创建工厂类。这个工厂将解析配置中的依赖项并在构造类时注入配置值并返回结果:

<?php
namespace Application\Factory;

use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;

class MyClassFactory implements FactoryInterface
{
    public function createService(ServiceLocatorInterface $serviceLocator)
    { 
        $config = $servicelocator->get('Config');
        $dependency = $config['dependency'];
        $myClass = new MyClass($dependency);
        return $myClass;
    }
}
 

现在已经创建了工厂类,它必须在密钥工厂下的模块配置文件module.config.php 的服务管理器配置中注册。最好为类和工厂使用相同的名称,以便在项目文件夹树中轻松找到它们:

<?php

namespace Application;

return array(
    //...
    'service_manager' => [
        'factories' => [
            'Application\Folder\MyClass' => 'Application\Factory\MyClassFactory'
        ]
    ],
    //...
);
 

或者,类名常量可用于注册它们:

<?php

namespace Application;

use Application\Folder\MyClass;
use Application\Factory\MyClassFactory;

return array(
    //...
    'service_manager' => [
        'factories' => [
            MyClass::class => MyClassFactory::class'
        ]
    ],
    //...
);
 

现在可以使用我们在为该类注册工厂时使用的密钥在服务管理器中收集类:

 $serviceManager->get('Application\Folder\MyClass');
 

要么

 $serviceManager->get(MyClass::class);
 

服务管理器将查找,收集并运行工厂,然后返回注入依赖项的类实例。

安装或设置

有关设置或安装Zend Framework 2的详细说明。有各种方法来安装框架。以下是其中一些:

使用Composer - 推荐方式

假设composer 安装在目标框上。

要安装骨架MVC应用程序,请在终端中运行以在指定位置创建新的zend framework 2项目:

php composer.phar create-project -sdev \
    --repository-url="https://packages.zendframework.com" \
    zendframework/skeleton-application path/to/install
 

手动安装最小的 ZF2(Zend MVC +其少数依赖项),在命令行中运行:

composer require zendframework/zend-mvc
 

完整的 ZF2(+64模块):

composer require zendframework/zendframework`
 

请注意,第一个选项运行一个安装程序,它将为您提供一个完整的功能应用程序以及通常的应用程序目录结构。其他选项将允许您从头开始构建整个应用程序,因为它只是提供了构建的ZF2模块。

使用Git子模块

运行以下命令从Github以递归方式克隆zf2及其依赖项:

git clone git://github.com/zendframework/ZendSkeletonApplication.git --recursive
 

HTTP服务器设置

典型的Web应用程序需要运行HTTP服务,侦听专用端口(通常为80)以将传入请求传递给应用程序,处理并提供输出(响应)。

注意:您还可以在Zend Framework 2中编写控制台感知应用程序,而无需HTTP服务器。

选项1 - PHP CLI服务器

如果使用PHP 5.4或更高版本,最简单的入门方法是在根目录中启动内部PHP cli-server。

转到项目目录并运行:

php -S 0.0.0.0:8080 -t public/ public/index.php`.
 

这将在端口8080 上启动内置cli-server,并将其绑定到所有网络接口。

选项2 - 自定义HTTP服务器

在Apache Microsoft IIS Server Nginx上配置虚拟主机,并将传入的HTTP请求传递给应用程序。