【问题标题】:Symfony function render parameters dynamiqueSymfony 函数渲染参数动态
【发布时间】:2019-01-19 04:47:59
【问题描述】:

大家好,我来找你是因为我有一个小问题,我希望能够帮助我,我用 symfony 创建了一个商店,但是我对函数“render()”有一个小问题例如,当我通过放置 3 或 4 在控制器类型中创建交叉 id 时,它可以工作,但是当我动态放置他时,它不起作用

我分享我的代码 我的控制器

 /**
     * @Route("/produits-views/{id}", name="product-views", methods="GET")
     * @param int $id
     * @return Response
     */
    public function viewsProduct(int $id): Response {

        $product = $this->getDoctrine()->getRepository(Product::class)->find($id);

        return $this->render('inc/views-product.html.twig', [
            'productViews' => $product
        ]);
    }

和我的函数渲染

{{ render(controller('App\\Controller\\FrontController::viewsProduct',
    {id: productViews.id}
)) }}

我将它包含在 footer.html.twig 中,而页脚包含在 base.html.twig 中

他给我发了这种类型的消息

Variable "productViews" does not exist.

谢谢你的帮助!

【问题讨论】:

  • 在模板中,当您转储该变量时会得到什么。?
  • 它不起作用,因为当我执行 {id: 3} 时您必须传递一个参数,但当我执行 {id: id} 时,他告诉我他没有找到变量跨度>
  • 看看symfony.com/doc/current/templating/global_variables.html 可能你需要构建一个全局的Twig 变量来使它可用于所有模板。

标签: php symfony twig render


【解决方案1】:

改变你的行动,让 Symfony 负责获取过程:

/**
 * @Route("/produits-views/{id}", name="product-views", methods="GET")
 * @param Product $product
 * @return Response
 */
public function viewsProductAction(Product $product): Response {
    return $this->render('inc/views-product.html.twig', [
        'productViews' => $product
    ]);
}

在 base.twig 中使用 productViews.id 调用渲染要求在扩展此模板的每个视图中都需要具有可访问的 productViews 变量,这意味着它已通过渲染参数提供给视图。

您需要考虑一下,您拥有的所有视图是否像会话中的用户一样提供此变量,如果不删除它,如果您需要根据每个视图显示产品,您可以从视图中更改页脚内容使用专用块作为页脚。

【讨论】:

  • 它不起作用,但我认为这不是symfony的问题,而是JS看到它是一个模态窗口的问题
  • this class: "js-show-modal1" 连接到模型,如何在javascript中管理?你有想法吗?
  • 不,它不是 JS,您应该知道 {{productViews}} 只有在您呈现视图“viewsProduct”并且仅在其树枝内部而不是之前而不是外部之后才会知道,这意味着“页脚。 twig" 或 "base.twig" 无法访问此变量,除非您在当前操作中提供它(不是 viewsProductAction)
  • 可变产品视图尚未识别她
猜你喜欢
  • 1970-01-01
  • 2018-06-15
  • 1970-01-01
  • 2021-03-16
  • 2011-03-10
  • 2018-01-08
  • 1970-01-01
  • 2019-10-20
  • 1970-01-01
相关资源
最近更新 更多