首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Concrete5控制器逻辑

Concrete5控制器逻辑
EN

Stack Overflow用户
提问于 2016-07-22 17:44:35
回答 2查看 110关注 0票数 1

我有以下用例,我需要从ip-api.com检索一些数据并将其放入会话中,以便稍后在应用程序的流程中使用一些特定的客户数据。

问题是我不知道在Concrete5中把逻辑放在哪里。我现在在application/src/IpApi中创建了一个类,这个类本身不是问题。主要的问题是我如何确保它在每个页面浏览量上都被执行。第二种选择是创建一个块,并将其添加到标题中,但我需要在frontpage激活之前,也就是在模板引擎呈现之前,解析数据。

我应该把它放在哪里,我应该如何加载它。我目前的主题是elemental主题的扩展,所以它仍然是开箱即用的。

谢谢你的建议

EN

回答 2

Stack Overflow用户

发布于 2016-08-05 00:19:31

您可以创建包并使用包控制器的on_start函数。我建议您也在on_before_render事件中执行此操作,以确保您不会对ajax请求或其他类似的事情执行此操作。它看起来像这样:

代码语言:javascript
运行
复制
<?php
namespace Concrete\Package\SomePackage;

class Controller extends \Concrete\Core\Package\Package
{

    public function on_start()
    {
        $app = \Core::make('app');
        $app->make('director')->addEventListener(
            'on_before_render', 
            function() use ($app) {
                $session = $app->make('session');
                $flashBag = $session->getFlashBag();

                if (!$flashBag->has('my-custom-data')) {
                    $dataGetter = $app->make('YourCustomDataGetterClass');
                    $flashBag->set('my-custom-data', $dataGetter->getData());
                }
            }
        );
    }

}
票数 1
EN

Stack Overflow用户

发布于 2016-07-22 20:52:16

我发现我应该首先创建一个PageType。之后,可以在application/controllers/page_types/<mytype.php>中创建特定类型的控制器

从那时起,on_start方法就是您的朋友,或者您需要的任何函数

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38523247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档