我编写了一个自定义yii\rest\UrlRule
,用于扫描目录并添加名为" * Controller.php"的所有文件。到我们的应用程序中允许的REST API控制器列表。
use yii\rest\UrlRule;
class RestWildcardUrlRule extends UrlRule
{
public $path = '@app/services/controllers';
public function init()
{
$d = dir(\Yii::getAlias($this->path));
$controllers = [];
while (($entry = $d->read()) !== false) {
if(strpos($entry, 'Controller.php')) {
$controllers[] = strtolower(str_replace(['Controller.php'], '', $entry));
}
}
$this->controller = $controllers;
parent::init();
}
}
这使我们不必在每个控制器类的配置中编写特定的UrlRules。一切都很好,除了现在我们需要检查每个控制器是否扩展了特定的基类:
class SomeRestController extends RestControllerBase
我是否必须在UrlRule->init()
方法中创建每个类的实例并使用is_subclass_of
之类的内容,或者是否有更简单的方法来查看每个控制器是否扩展RestControllerBase
?< / p>
答案 0 :(得分:3)
您可以使用
get_parent_class ( ... )
检索对象或类的父类名称。
http://php.net/manual/en/function.get-parent-class.php
另请参阅Alex Blex建议的class_parent() http://php.net/manual/en/function.class-parents.php