【问题标题】:How to run an action of controller file from .ctp file?如何从 .ctp 文件运行控制器文件的操作?
【发布时间】:2011-05-06 01:58:03
【问题描述】:

我想从另一个 .ctp 文件调用一个动作及其控制器文件的 .ctp 文件。 例如

users_controller.php 有一个名为 list_category() 的操作,我想从 /app/views/pages/index.ctp 文件中调用它。不仅要调用 list_category 还要显示它的 html 输出(我的意思是 list_category.ctp 也应该被渲染)。

谢谢。

【问题讨论】:

    标签: php cakephp render


    【解决方案1】:

    创建一个元素,例如list_category.ctp

    在元素中使用requestAction获取数据:

    <?php
        $categories = $this->requestAction('/users/list_categories');
    ?>
    
    <?php foreach($categories as $category): ?>
    
        <?php // Your display code goes here ?>
    
    <?php endforeach; ?>
    

    在你的控制器中确保你return你想要的数据。

    <?php
        function list_categories() {
    
            return $this->User->Category->find('all');
    
        }
    ?>
    

    您可以将代码重复用于您的 list_category.ctp 视图。

    使用requestAction 时会有开销,但通常是less than people believe

    【讨论】:

    • 但是如果我想将此操作用作小部件怎么办。我的意思是我想调用这个动作也希望它在另一个布局/vtp 文件中呈现的 ctp html。
    • 你可以在任何你想渲染的地方调用元素。在任何视图中,如果您键入 element('list_category'); ?> 它将渲染元素,元素中的 requestAction 将从控制器中获取数据。
    【解决方案2】:

    这可以通过requestAction 完成,但请注意,它很昂贵,您应该小心使用它。

    【讨论】:

      【解决方案3】:

      如何从您的主控制器调用控制器,然后将其结果传递给您的布局。最后使用一个元素在那里呈现输出,并使用该元素在另一个控制器上呈现输出。这样你就没有重复的布局。两个控制器只使用一个元素。

      这与 Rails 在“烘焙”布局时创建布局的方式非常相似。它创建了一个元素的等价物以在添加和编辑布局中使用。

      【讨论】:

        【解决方案4】:

        这似乎是错误的,你想要完成什么?元素呢?

        【讨论】:

          【解决方案5】:

          你可以通过路由来做到这一点吗?我不确定我脑海中的语法,但我认为您可以指定控制器在您登陆该页面时运行的方法

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2011-10-10
            • 1970-01-01
            • 2023-04-05
            • 2019-01-27
            • 2017-10-24
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多