比如分頁類預設的配置
knp_paginator:
page_range: 5default_options: page_name: page111 # page query parameter name sort_field_name: sort # sort field query parameter name sort_direction_name: direction # sort direction query parameter name distinct: true # ensure distinct results, useful when ORM queries are using GROUP BY statementstemplate: pagination: KnpPaginatorBundle:Pagination:sliding.html.twig # sliding pagination controls template sortable: KnpPaginatorBundle:Pagination:sortable_link.html.twig # sort link template
我在控制器中自訂了一個函數查看都有哪些parameters
發現有的配置資訊在parameterBag裡面而有的沒有
例如:
$this->getParameter('knp_paginator.page_range') 就有值 是 5
$this->getParameter('knp_paginator.default_options') 就會直接報錯
不知道是咋回事
如果我想讀取 knp_paginator.default_options.page_name 應該怎麼寫
回複內容:
比如分頁類預設的配置
knp_paginator:
page_range: 5default_options: page_name: page111 # page query parameter name sort_field_name: sort # sort field query parameter name sort_direction_name: direction # sort direction query parameter name distinct: true # ensure distinct results, useful when ORM queries are using GROUP BY statementstemplate: pagination: KnpPaginatorBundle:Pagination:sliding.html.twig # sliding pagination controls template sortable: KnpPaginatorBundle:Pagination:sortable_link.html.twig # sort link template
我在控制器中自訂了一個函數查看都有哪些parameters
發現有的配置資訊在parameterBag裡面而有的沒有
例如:
$this->getParameter('knp_paginator.page_range') 就有值 是 5
$this->getParameter('knp_paginator.default_options') 就會直接報錯
不知道是咋回事
如果我想讀取 knp_paginator.default_options.page_name 應該怎麼寫
查看了該Bundle對應的KnpPaginatorExtension類之後,發現這個Bundle對應的default_options並沒有使用容器的setParameter方法進行參數聲明,所以無法通過容器的getParameter方法擷取(如果哪位大神發現擷取方法也可以告訴我)。
如果你想要擷取相關參數,可以這樣做。
在parameters.yml中聲明對應的參數:
knp_paginator_options: page_name: custom_page_name sort_field_name: sort sort_direction_name: direction distinct: true
然後在config.yml中這樣使用
knp_paginator: page_range: 5 default_options: "%knp_paginator_options%" template: pagination: KnpPaginatorBundle:Pagination:sliding.html.twig # sliding pagination controls template sortable: KnpPaginatorBundle:Pagination:sortable_link.html.twig # sort link template
簡單把參數抽離到parameters.yml檔案中,然後把整個參數對象賦值給default_options,這樣就ok了,然後如果你想擷取對應的參數值,就可以直接使用$this->getParameter('knp_paginator_options')['page_name']擷取了。
希望能幫到你~
首先,你對Symfony配置的理解有誤!
第一,$this->getParameter()方法顧名思義,讀取的內容必須是parameters欄位下的參數。你想讀取的參數不一定就在parameters欄位下。還需要進一步探究(首先應該查看官方文檔這方面的說明,如果沒有,則往下看)。
第二,KnpPaginatorBundle這個第三方Bundle的配置是通過這個類,也就是Bundle的依賴注入擴充類(Dependency Injection (DI) Extension)Knp\Bundle\PaginatorBundle\DependencyInjection\KnpPaginatorExtension來載入的。以下代碼摘自該類的load方法。
$container->setParameter('knp_paginator.template.pagination', $config['template']['pagination']);$container->setParameter('knp_paginator.template.filtration', $config['template']['filtration']);$container->setParameter('knp_paginator.template.sortable', $config['template']['sortable']);$container->setParameter('knp_paginator.page_range', $config['page_range']);
通過以上代碼,可以看出,這個Bundle一共定義了四個參數,你可以通過$this->getParameter()方法分別擷取這四個參數,如下:
$this->getParameter('knp_paginator.template.pagination');$this->getParameter('knp_paginator.template.filtration');$this->getParameter('knp_paginator.template.sortable');$this->getParameter('knp_paginator.template.page_range');
最後,至於其他參數,由於Bundle作者沒有在依賴注入擴充類中以parameter的形式暴露給開發人員,我們是無法通過$this->getParameter()方法擷取的。
相關文檔連結如下:How to Load Service Configuration inside a Bundle