Zend框架中的扩展控制器2


Extending controller in Zend Framework 2

这是我的应用程序结构:

/application
/config
/library
  /Foo
    /Controler.php
/module
  /User
    /config
    /src
      /Bar
        /Controler
          /BarController.php
/public
/vendor
/init_autoloader.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_autolloader .php

中增加了path/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.');
}

PHP致命错误:Class 'Foo_Controller'Foo_Controller' not found in/application/module/Bar/src/Bar/Controller/BarController.php on line # 我现在真不知道该怎么办。我已经在互联网上搜索了一段时间,现在在Zend框架2中扩展控制器类的正确方法,但我似乎无法掌握它!

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

我建议你稍微改变一下。创建你自己的自定义模块会更有意义,你可以加载到任何项目的目录结构,如:

/zf2-MyCustomModule/src/MyCustomModule/控制器/文摘/MyAbstractController.php

MyAbstractController.php的命名空间为- MyCustomModule'Controller'Abstract

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

/抽象/MyAbstractController.php

到用户模块控制器目录。

,但似乎你所做的是非常正确的你只需要更新名称空间在Foo_Controller.php:

namespace Julia'Foo'Controller;

namespace Foo_Controller;

虽然我从来没有使用过你正在使用的方法,所以我不是100%确定。

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

/config/自动装载/namespaces.global.php

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

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