【问题标题】:Naming controllers in HMVC pattern using php's namespaces使用 php 的命名空间在 HMVC 模式中命名控制器
【发布时间】:2012-03-08 20:07:57
【问题描述】:

我在application/libraries 中为我使用的 API 创建了多个库。

API:

  • Vimeo
  • Flickr

现在我在application/modules/apis/controllers/vimeo.phpapplication/modules/apis/controllers/flickr.php 中创建了它们,它们将根据其他模块的请求与库进行交互。

问题是现在我重新声明了类:

  • 库/Flickr.php:

    Class Flickr { }

  • 模块/apis/controllers/flickr.php:

    Class Flickr extends MX_Controller { }

所以我进入了 apache2 的错误日志:Cannot redeclare class Flickr in ...

编辑:

所以在我的modules/apis/controllers/flickr.php 文件中:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

Class Flickr extends MX_Controller { ... }

我应该如何使用:

namespace controllers\blog

class user extends \CI_Controller {

在这里解释:http://codeigniter.com/forums/viewthread/212661/?

试过了:

<?php

//TRIED:
namespace controllers\flickr;
namespace Flickr;
namespace modules\apis\controllers\flickr;

if ( ! defined('BASEPATH')) exit('No direct script access allowed');

Class Flickr extends \MX_Controller { ... }

$_ns = __NAMESPACE__;

但是我没有从一个简单的函数中得到响应,该函数回显“alex”,并且在我调用控制器和函数的日志中没有错误。

【问题讨论】:

    标签: php codeigniter controller organization hmvc


    【解决方案1】:

    PHP 5.3 增加了对命名空间的支持。虽然 CodeIgniter 还不支持它们,但我确实找到了一个最近的论坛帖子,声称有一个补丁可以让你使用它们。

    http://codeigniter.com/forums/viewthread/212661/

    【讨论】:

    • 这似乎是解决方案,但无法理解我应该如何将它应用于我的问题。 namespace controllers\blog class user extends \CI_Controller { 在我的情况下应该如何?
    • 我认为您还需要将行 $_ns = __NAMESPACE__; 放在控制器文件的底部。
    • 已经这样做了,我不再收到错误消息了...但是调用该函数没有返回任何内容
    • 太糟糕了,这个答案只包含一个死链接。
    猜你喜欢
    • 2012-07-08
    • 2023-04-04
    • 2015-07-05
    • 2014-05-19
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多