Heim  >  Artikel  >  Backend-Entwicklung  >  Wie liest Symfony Konfigurationsinformationen?

Wie liest Symfony Konfigurationsinformationen?

WBOY
WBOYOriginal
2016-08-04 09:21:421369Durchsuche

Zum Beispiel die Standardkonfiguration der Paging-Klasse

knp_paginator:

<code>page_range: 5
default_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 statements
template:
    pagination: KnpPaginatorBundle:Pagination:sliding.html.twig     # sliding pagination controls template
    sortable: KnpPaginatorBundle:Pagination:sortable_link.html.twig # sort link template
</code>

Ich habe eine Funktion im Controller angepasst, um zu sehen, welche Parameter vorhanden sind

Ich habe festgestellt, dass sich einige Konfigurationsinformationen im ParameterBag befinden und andere nicht.
Zum Beispiel:
$this->getParameter('knp_paginator.page_range') hat einen Wert von 5
$this ->getParameter ('knp_paginator.default_options') meldet direkt einen Fehler
Ich weiß nicht, was los ist
Was soll ich schreiben, wenn ich knp_paginator.default_options.page_name lesen möchte

Antwortinhalt:

Zum Beispiel die Standardkonfiguration der Paging-Klasse

knp_paginator:

<code>page_range: 5
default_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 statements
template:
    pagination: KnpPaginatorBundle:Pagination:sliding.html.twig     # sliding pagination controls template
    sortable: KnpPaginatorBundle:Pagination:sortable_link.html.twig # sort link template
</code>

Ich habe eine Funktion im Controller angepasst, um zu sehen, welche Parameter vorhanden sind

Ich habe festgestellt, dass sich einige Konfigurationsinformationen im ParameterBag befinden und andere nicht.
Zum Beispiel:
$this->getParameter('knp_paginator.page_range') hat einen Wert von 5
$this ->getParameter ('knp_paginator.default_options') meldet direkt einen Fehler
Ich weiß nicht, was los ist
Was soll ich schreiben, wenn ich knp_paginator.default_options.page_name lesen möchte

Nachdem ich die dem Bundle entsprechende KnpPaginatorExtension-Klasse überprüft hatte, stellte ich fest, dass die dem Bundle entsprechenden default_options nicht die setParameter-Methode des Containers für die Parameterdeklaration verwendeten und daher nicht über die getParameter-Methode des Containers (falls vorhanden) abgerufen werden können Wenn ein Experte herausfindet, wie man es erhält, sagen Sie es mir bitte).

Wenn Sie relevante Parameter erhalten möchten, können Sie dies tun.

Deklarieren Sie die entsprechenden Parameter inparameters.yml:

<code>knp_paginator_options:
        page_name: custom_page_name
        sort_field_name: sort
        sort_direction_name: direction
        distinct: true</code>

Dann verwenden Sie dies in config.yml

<code>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</code>

Extrahieren Sie einfach die Parameter in die Datei „parameters.yml“ und weisen Sie dann das gesamte Parameterobjekt „default_options“ zu. Wenn Sie dann den entsprechenden Parameterwert erhalten möchten, können Sie direkt $this->getParameter( verwenden. 'knp_paginator_options')['page_name'] erhalten.

Ich hoffe, es hilft dir~

Zuallererst ist Ihr Verständnis der SymfonyKonfiguration falsch!

Zuerst muss, wie der Name der Methode $this->getParameter() vermuten lässt, der gelesene Inhalt aus den Parametern unter dem Feld parameters bestehen. Die Parameter, die Sie lesen möchten, befinden sich nicht unbedingt im Feld parameters. Weitere Untersuchungen sind erforderlich (Sie sollten zunächst die offizielle Dokumentation auf diesbezügliche Anweisungen prüfen, andernfalls lesen Sie weiter).

Zweitens KnpPaginatorBundleDie Konfiguration dieses Drittanbieters Bundle wird über diese Klasse geladen, bei der es sich um die Dependency-Injection-Erweiterungsklasse (Bundle) Dependency Injection (DI) Extension von KnpBundlePaginatorBundleDependencyInjectionKnpPaginatorExtension handelt. Der folgende Code ist ein Auszug aus der load-Methode dieser Klasse.

<code>$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']);</code>

Anhand des obigen Codes können Sie sehen, dass dieser Bundle insgesamt vier Parameter definiert. Sie können diese vier Parameter wie folgt über die $this->getParameter()-Methode erhalten:

<code>$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');</code>

Abschließend können wir die anderen Parameter nicht über die Bundle-Methode abrufen, da der $this->getParameter()-Autor sie den Entwicklern nicht in Form von Parametern in der Dependency-Injection-Erweiterungsklasse zur Verfügung gestellt hat.

Relevante Dokumentlinks lauten wie folgt: So laden Sie die Servicekonfiguration in ein Bundle

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn