6
class SomeController extends Controller
{

        public function actionIndex() {
                echo 'This is some controller';
        }
}


class AnotherController extends SomeController
{

        public function actionIndex() {
                echo 'This is another controller';
        }
}

这有效:

index.php?r=some

但 ...

index.php?r=another

说:

PHP 警告

包括(SomeController.php):无法打开流:没有这样的文件或目录

两个文件都在

test\protected\controllers\

顺便说一句,过去我也尝试使用带有“SomeController”作为基类的 Gii 控制器生成器......

它说:

The controller has been generated successfully. You may try it now.

Generating code using template 
"C:\xampp\htdocs\yii\framework\gii\generators\controller\templates\default"...
generated controllers\YetAnotherController.php
generated views\yetAnother\index.php
done!

当我点击“立即尝试”时,它还说:

PHP 警告

包括(SomeController.php):无法打开流:没有这样的文件或目录

4

2 回答 2

12

编辑:

protected/controllers中的类不会自动加载,因此您必须在从父类文件扩展之前导入父类文件:

另一个控制器.php 中

Yii::import('application.controllers.SomeController');
public class AnotherController extends SomeController {
    // ...
}

如果您还需要从 url 访问基类,则可以使用上述方法。否则,您可以将您的基类放在protected/components中,正如您已经知道的那样。


Yii 自动加载只有在你的文件名与文件包含的类名相同时才有效。含义class SomeController应该在SomeController.php文件中。

进行这些更改,它应该可以工作。

一个有用的 wiki:了解自动加载助手类和助手函数

指南链接

类文件应该以它们包含的公共类命名。

于 2013-01-04T03:08:41.587 回答
3

要扩展任何类,只需转到配置文件并在导入部分添加类

'import' => array('application.controllers.SomeController')

这将使其在整个应用程序中可用,而无需显式导入。

于 2013-01-11T14:58:51.623 回答