【问题标题】:Access Controller data from an element来自元素的访问控制器数据
【发布时间】:2013-02-10 21:54:56
【问题描述】:

我有一个从我的 layouts/default.ctp 文件中调用的侧边栏导航元素,我需要从我的 Photos 控制器访问一些关于类别的数据。我该怎么做呢?

【问题讨论】:

    标签: php cakephp access-control


    【解决方案1】:

    请谨慎使用 requestAction,除非您有效地使用缓存,否则它会真正减慢您的应用程序,因为每次调用它时它都会开始一个全新的请求周期。

    Travis Leleu 的回答将是标准的做事方式。但是,如果您必须将数据(出于可移植性或其他原因)导入到元素中,那么 requestAction 不是可行的方法。

    由于您没有执行任何必须在控制器中的业务逻辑,我强烈建议您将模型类作为单例导入并实例化到您的元素中。你可以使用 ClassRegistry::init();

    $Photo = ClassRegistry::init('Photo');
    $Photo->find('all');
    

    如果您需要对数据进行任何额外的处理,您应该在模型本身中使用 Cakes afterFind 回调或在您的 Photo 模型中创建自定义方法:

    class Photo extends AppModel {
    
        function customFind () {
            $photos = $this->find('all');
            foreach ($photos as $photo) {
                //processing code here...
            }
        }
    
    }
    

    然后在你的元素中调用它:

    $Photo = ClassRegistry::init('Photo');
    $Photo->customFind();
    

    基本上,我在这里想要表达的是,唯一适合 requestAction 的情况是您需要执行重定向或使用组件等操作。

    如果您只是简单地检索和/或操作数据,那么它属于模型。

    【讨论】:

      【解决方案2】:

      你可以把你的layous/default.ctp当作一个普通的模板,然后放

      <?php echo $this->element('your element'); ?>
      

      你需要它的地方。

      b.t.w,使用:

      $data = $this->requestAction('controller/action');
      

      访问数据

      【讨论】:

      • 对不起,也许我应该澄清一下。我正在使用 element('side_nav'); ?> 在我的 layouts/default.ctp 中,我需要在“elements/side_nav.ctp”中获取该元素,以访问从 Photos 控制器检索到的数据。
      • @trobrock,你试过用:"$data = $this->requestAction('photos/someaction');"来获取元素中的数据吗?
      • 我没有,我会试试的。对不起,我看错了你的答案
      【解决方案3】:

      您可以将数据发送到您的元素。例如在你的 default.ctp 中:

      <?php echo $this->element('side_nav', $your_data); ?>
      

      您可以在 side_nav.ctp 中处理该数据。

      【讨论】:

        【解决方案4】:

        你为什么不按照标准的 Cake 约定来做呢?

        在控制器中,

        $this->set('categories', $this->Photos->find(...));

        【讨论】:

          猜你喜欢
          • 2013-04-07
          • 1970-01-01
          • 2022-07-06
          • 1970-01-01
          • 1970-01-01
          • 2015-12-30
          • 2014-11-07
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多