如何在自定义Yii2 UrlRule

时间:2017-06-27 15:26:12

标签: php rest yii2

我编写了一个自定义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>

1 个答案:

答案 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