亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

帶有 Symfony PHP 的 Twig 中的組件級控制器

帶有 Symfony PHP 的 Twig 中的組件級控制器

PHP
慕蓋茨4494581 2023-04-21 15:28:00
我正在使用 Symfony 4.x,目前在 Twig 模板中包含這樣的組件:我的模板.twig{%  include '/components/my-component.twig'    with {        data1 : some_array,        data2 : some_string    }%}在上面的示例中,my-component.twig需要data1將data2其傳遞給它。這意味著這兩個數據項需要對...可用my-template.twig,這意味著我需要使其在加載 my-template.twig的控制器中可用。class MyController extends Controller {   // ...    $data = [       'data1' = [ /* some array data */ ];       'data2' = 'a string';   ];    $res = $this->renderView('my-template.twig', $data);    return new Response($res);}我遇到的問題是我可能會my-component.twig在許多不同的模板中使用,每個模板都有自己獨立的控制器。為了data1. data2_ my-component.twig_通過在服務中包含公共數據對象并將該服務包含在需要特定數據的所有控制器中,我已經在一定程度上解決了這個問題,但這也不是理想的。如果一個特定的 Twig 組件是完全自封裝的,那將是理想的——這意味著我可以將它自由地包含在一個模板中,它會自動獲取它自己的所有數據。也就是說,該組件有它自己的專用“控制器”,即 PHP 代碼在特定 Twig 模板(組件)呈現時自動運行,而無需明確指示。在 Symfony 中有這樣的可能嗎?
查看完整描述

1 回答

?
GCT1015

TA貢獻1827條經驗 獲得超4個贊

如果我理解正確,您想在樹枝中使用#render() 方法。


您在控制器中創建一個方法,即 myComponentRender() 然后您可以執行此操作而不是執行 include


{{ render(controller(

? ? 'App\\Controller\\MyController::myComponentRender',

? ? { 'foo': 'bar' }

)) }}

我已經包含了 foo 參數只是為了向您展示如果需要可以傳遞一個參數(例如如果您想區分哪個頁面正在調用它),但是根據您的示例判斷您可能不需要傳遞任何東西


澄清一下,在您的 myComponentRender() 方法中,您需要返回 $this->render(...)

查看完整回答
反對 回復 2023-04-21
  • 1 回答
  • 0 關注
  • 142 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號