【问题标题】:ZF2 autoloading custom modules with composerZF2 使用 composer 自动加载自定义模块
【发布时间】:2013-01-13 03:56:01
【问题描述】:

我正在尝试设置一个 ZF2 项目(与 zf2skeleton 略有不同),我想使用 composer 来处理所有自动加载,不仅来自供应商的自动加载(通过 composer 安装),还包括我创建的那些模块。

由于某种原因,我无法访问我的应用程序模块索引控制器。我认为它的自动加载不起作用......我只是不知道我可能做错了什么......

谢谢!

以下文件和数据:

这是我的文件夹结构:

index.php
private
- modules
-- Aplication
--- src
----- Aplication
------- Controller
---------- IndexController.php
- vendor
-- zendframework
-- composer
-- autoload.php
- composer.json
- composer.phar

main.config.php

return array(
    'modules' => array(
        'Application',
    ),
    'module_listener_options' => array(
        'config_glob_paths' => array(
            'private/config/autoload/{,*.}{global,local}.php',
        ),
        'cache_dir' => realpath(dirname(__DIR__) . '/../../data/cache'),
        'module_paths' => array(
            realpath(__DIR__ . '/../module'),
            realpath(__DIR__ . '/../vendor'),
        ),
    ),
);

index.php

include_once 'private/vendor/autoload.php';

$application = Zend\Mvc\Application::init(include 'private/config/main.config.php');
return $application;

composer.json

{
    "repositories": [
        {
            "type": "composer",
            "url": "http://packages.zendframework.com/"
        }
    ],
    "require": {
        "php": ">=5.3.3",
        "zendframework/zendframework": "2.*"
    },
    "autoload": {
        "psr-0": {
            "Application\\": "module/Application/src"
        }
    }
}

应用配置

return array(
    'router' => array(
        'routes' => array(
            'home' => array(
                'type' => 'Zend\Mvc\Router\Http\Literal',
                'options' => array(
                    'route' => '/',
                    'defaults' => array(
                        'controller' => 'Application\Controller\Index',
                        'action' => 'index',
                    ),
                ),
            ),
        ),
    ),
    'controllers' => array(
        'invokables' => array(
            'Application\Controller\Index' => 'Application\Controller\IndexController'
        ),
    ),
);

索引控制器

namespace Application\Controller;

use Zend\Mvc\Controller\AbstractActionController;

class IndexController extends AbstractActionController {

    public function indexAction() {
        die("app ok");
    }

}

【问题讨论】:

  • 可能太明显了,但你确实运行了php composer.phar update? (如果是,我无能为力,如果不是:做吧!)
  • @Sam 是的,我确实运行了更新 :) 但没有运气......

标签: zend-framework2 composer-php autoloader


【解决方案1】:

首先,据我所知,您没有运行您的应用程序:

$application = Zend\Mvc\Application::init(include 'private/config/main.config.php');
$application->run();

另一点是,您不必使用 composer 来加载您的模块。由于您的应用程序配置已经包含module 目录,模块加载过程将自动扫描该目录并使用在您的模块类级别定义的加载策略。

【讨论】:

  • 这实际上是问题所在。但是,为什么不使用作曲家呢?如果我想保留一个“更新方法”但又不想转储供应商文件夹中的所有内容怎么办? :| (这是我的想法..)
  • 您的供应商文件夹也被标记为模块目录,请参阅您的配置数组中的 module_paths 键
猜你喜欢
  • 2019-11-06
  • 2016-04-17
  • 1970-01-01
  • 2019-12-05
  • 2012-09-23
  • 1970-01-01
  • 2020-07-22
  • 1970-01-01
  • 2012-08-28
相关资源
最近更新 更多