【问题标题】:Yii Autoloading Custom ComponentsYii 自动加载自定义组件
【发布时间】:2013-04-12 15:35:29
【问题描述】:

我试图让 Yii 自动加载不遵循 Yii 约定的组件。有问题的库是 Stripe,我将它移到了 Components 文件夹中。通过像这样修改我的配置,我能够让它自动加载主 Stripe 文件没有问题:

'import'=>array(
    'application.models.*',
    'application.components.*',
    'application.components.stripe.*',
),

目录结构如下:

Components
----------
  |
  ----> Stripe
     | 
     ----> Stripe.php    (Class Name = "Stripe")
     ----> Customer.php  (Class Name = "Stripe_Customer")
     ----> Charge.php    (Class Name = "Stripe_Charge")
     ----> etc.

识别Stripe类没有问题,但找不到Stripe_*命名类。有没有办法让 Yii 识别这种模式,还是我在控制器中坚持手动 require 语句?如果我将所有文件重命名为它们的类名,它会起作用吗?

【问题讨论】:

    标签: php yii autoload stripe-payments


    【解决方案1】:

    是的,将文件重命名为类名会有所帮助。否则你必须自己要求这些课程。

    【讨论】:

    • 好的,谢谢。那么“Yii方式”让文件与类命名相同吗?
    • 是的,这就是 yii 的方式;)虽然这不是一个坏习惯。
    【解决方案2】:

    您也可以创建自己的自动加载器并将其注册到:Yii::registerAutoloader(array("AutoloderClass", "methodName"), $append);
    第一个参数实际上是一个 php 回调,我使用类和方法表示法,也可以是函数。这实际上根据第二个参数调用spl_autoload_register - 在Yii 自动加载器之前或之后。 Autoloader 应该在$app->run() 之前在index.php 中注册。

    可以在这里找到一些示例自动加载器(用于 zend 框架): http://www.yiiframework.com/extension/zendautoloader

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-05
      • 1970-01-01
      相关资源
      最近更新 更多