0

我希望能够获取某个属性是某个值的所有模型的名称。

理想情况下,我想在 AppModel 中放置一个属性,然后继承并随后由所有其他模型设置,以便可以从任何地方轻松访问它。这是我的想法的要点:

在我要分组的任何模型中将此设置为true :

class AppModel extends Model {
    public $hasPortal = false;
}

然后将此函数添加到 AppController:

class AppController extends Controller {
    public $components = array('DebugKit.Toolbar'); 
    static function getPortals() {
        $portalModels = array();    
        $models = App::objects('Model');
        foreach( $models as $model ) {
            if ( !class_exists($model) ) {
                $m = ClassRegistry::init($model);
                if ( $m->hasPortal ) {
                    $portalModels[] = $model;
                }
            }           
        }       
        return $portalModels;           
    }
}

因此我可以做到这一点:$portals = AppController::getPortals()在任何地方都可以——而且现在它工作得很好(当我有超过 20 个课程时!),但我很确定它的效率低得愚蠢。我希望能够动态地对模型集合(最好是控制器和函数)进行分组以生成菜单。但我对 OOP 很陌生,并且潜伏着怀疑这不是获得我想要的功能的最有效方法。

在继续阅读之前查看评论,我正在处理一个描述我的具体背景的请求

我完全不相信这种方法有意义!

我正在尝试实现的实际事情是在home.ctp. 使用上面的代码,我home.ctp有这个:

$portaledModels = AppController::getPortals();
foreach ($portaledModels as $model) {
    echo $this->element('modelPortal', array('model' => $model) );
}

(虽然最终 $model 将是一个包含描述、图标链接等的数组。)

通常情况下,在蛋糕应用程序的默认“主页”页面上,我真正想要的是一种导航到许多模型的各种操作的方法——但不是全部(即,entries/index并且authors/index是显而易见的选择,而entries_authors没有任何价值给用户)。

所以在这种情况下,我想创建一个元素,为那些应该可以访问的模型返回一个导航界面(这不是代替 ACL 列表,我不是为了安全而使用它,只是为了方便自动化home.ctp 的内容)。

我知道手动创建此类模型的列表并在必要时对其进行更新很容易。不过,一般来说,我尽量不写任何可以通过编程获得的东西。我突然想到我可以创建一个models模型,基本上是我的应用程序中内容的注册表,然后requestAction()我可以达到同样的效果。但是后来我迷失了思考如何在每个模型被调用时自动注册它自己,但只是第一次?这可能是向大家重申我是业余开发者的好时机,哈哈哈。:)

4

0 回答 0