symfony如何讀取配置資訊?

來源:互聯網
上載者:User
比如分頁類預設的配置

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) ExtensionKnp\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

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.