【问题标题】:PHP Symfony 1.4 - best way to pass data from action to a component?PHP Symfony 1.4 - 将数据从动作传递到组件的最佳方式?
【发布时间】:2012-02-29 12:40:42
【问题描述】:

我在我的 symfony 应用程序中制作面包屑菜单:我在 execute{Action} 中创建了一个链接列表,然后我使用 layout.php 中的一个组件来显示它,所以我正在寻找将数据从 action 传递到这个组件。我可以使用 sfContext 作为注册表,但也许有更好的方法?

【问题讨论】:

  • 似乎使用 flash 变量在文档中很常见。我同意这是骇客,它是我经常遇到的 1.4 中最大的黑眼圈之一,以从一个动作转发到另一个动作的形式。

标签: php symfony1 symfony-1.4


【解决方案1】:

通常您会在操作视图中使用插槽:

slot('breadcrumb', $links);

然后在你的 layout.php 中:

<?php if(has_slot('breadcrumb')): ?>
  <?php include_component('modulename', 'breadcrumb', get_slot('breadcrumb')); ?>
<?php endif; ?>

基本上slot 在上下文中使用一个特殊的命名空间(或者可能是它的响应......某处的 sfParameterHolder 的某个实例,呵呵)作为插槽名称/值的注册表 - 所以您考虑的解​​决方案已经实现:-)

【讨论】:

  • 感谢您的回答,但我的问题是无论如何都必须包含面包屑组件,即使未在操作中定义链接 - 然后它(组件)会生成链接。而且我不想将面包屑链接传递给操作的模板,因为我认为它甚至不如使用注册表优雅。
  • 另一个解决方案是将面包屑生成(链接的确定和组装)从组件移动到单独的类。然后你可以将这个类注入到context.load_factories 的上下文中,用当前的sfWebRequest 对其进行初始化,我认为这足以解决你的面包屑问题。如果不是,您也可以将同一个类挂接到controller.change_action 事件中,以将已解决的操作推送到其中。如果不知道您的面包屑是如何编译的,这很难说。然后你只需从组件中获取这个面包屑类。
【解决方案2】:

在你的行动中:

$this->links = array('link1', 'link2', 'linkn');

在您的模板中:

<?php include_component('modulename', 'breadcrumb', array('links' => $links); ?>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-30
    • 2016-02-12
    • 2011-02-18
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 2010-09-22
    • 2018-12-18
    相关资源
    最近更新 更多