【问题标题】:Extending controller in Zend Framework 2Zend Framework 2 中的扩展控制器
【发布时间】:2014-05-07 01:14:02
【问题描述】:

这是我的应用结构:

/application
/config
/library
  /Foo
    /Controler.php
/module
  /User
    /config
    /src
      /Bar
        /Controler
          /BarController.php
/public
/vendor
/init_autoloader.php

Controler.php 文件...

namespace Foo_Controller;

use Zend\Mvc\Controller\AbstractRestfulController;

class Foo_Controller extends AbstractRestfulController {
  protected $foo;

  public function getFoo()
  {
    return "foooo";
  }

  function __construct() 
  {
    parent::__construct();
    $foo = $this->getFoo();
  }
}

BarController.php...

namespace Bar\Controler;

use Zend\Mvc\Controller\AbstractRestfulController;
use Foo_Controller\Foo_Controller;
use Zend\View\Model\JsonModel;

class BarController extends Foo_Controller {
.
..
....
}

在init_autoloader.php中添加路径/library文件夹

  $loader = include 'vendor/autoload.php';
  $zf2Path = 'vendor/zendframework/zendframework/library';
  $loader->add('Zend', $zf2Path);
  $loader->add('Julia', 'library'); // added the library folder

  if (!class_exists('Zend\Loader\AutoloaderFactory')) {
    throw new RuntimeException('Unable to load ZF2. Run `php composer.phar install` or     define a ZF2_PATH environment variable.');
}

我收到错误 500,内容如下:
PHP 致命错误:第 # 行的 /application/module/Bar/src/Bar/Controller/BarController.php 中找不到类 'Foo_Controller\Foo_Controller'

我现在真的不知道该怎么办。我一直在互联网上搜索在 Zend Frazmework 2 中扩展控制器类的正确方法,但我似乎无法掌握它!

我在应用程序中做错了什么? 谢谢

【问题讨论】:

    标签: php zend-framework2 controllers


    【解决方案1】:

    我建议您对此进行稍微不同的设置。创建您自己的自定义模块确实更有意义,您可以将其加载到具有以下目录结构的任何项目中:

    /zf2-MyCustomModule /src /我的自定义模块 /控制器 /抽象的 /MyAbstractController.php

    MyAbstractController.php 的命名空间将是 - MyCustomModule\Controller\Abstract

    如果它是特定于项目的,那么为什么不添加

    /摘要 /MyAbstractController.php

    到用户模块控制器目录。

    但您所做的似乎非常正确,您只需将 Foo_Controller.php 中的命名空间更新为:

    namespace Julia\Foo\Controller;
    

    不是

    namespace Foo_Controller;
    

    虽然我从未使用过您使用的方法,但我不能 100% 确定。

    我会添加一个新的本地配置到 /config/autoload/

    喜欢 /config/autoload/namespaces.global.php

    Zend\Loader\AutoloaderFactory::factory(array(
         'Zend\Loader\StandardAutoloader' => array(
             'namespaces' => array(
                 'Julia' => __DIR__ . '/Library',
             ),
         )
    ));
    

    那么你的命名空间应该仍然是 Julia\Foo\Controller;

    【讨论】:

    • 是的,更改命名空间应该可行。我在 ZF2 中扩展了控制器,没有任何问题。
    猜你喜欢
    • 1970-01-01
    • 2012-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-05
    • 1970-01-01
    • 2013-01-21
    相关资源
    最近更新 更多