> 백엔드 개발 > PHP 튜토리얼 > Symfony는 구성 정보를 어떻게 읽나요?

Symfony는 구성 정보를 어떻게 읽나요?

WBOY
풀어 주다: 2016-08-04 09:21:42
원래의
1390명이 탐색했습니다.

예를 들어 페이징 클래스의 기본 구성

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>
로그인 후 복사
로그인 후 복사

어떤 매개변수가 있는지 확인하기 위해 컨트롤러의 기능을 맞춤설정했습니다

parameterBag에 일부 구성 정보가 있고 일부는 없는 것을 발견했습니다.
예:
$this->getParameter('knp_paginator.page_range')의 값은 5
$this입니다. ->getParameter('knp_paginator.default_options')가 직접 오류를 보고합니다
무슨 일인지 모르겠습니다
knp_paginator.default_options.page_name을 읽으려면 어떻게 써야 하나요

답글 내용:

예를 들어 페이징 클래스의 기본 구성

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>
로그인 후 복사
로그인 후 복사

어떤 매개변수가 있는지 확인하기 위해 컨트롤러의 기능을 맞춤설정했습니다

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에서 해당 매개변수를 선언합니다.

<code>knp_paginator_options:
        page_name: custom_page_name
        sort_field_name: sort
        sort_direction_name: direction
        distinct: true</code>
로그인 후 복사

그런 다음 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>
로그인 후 복사

매개변수를 매개변수.yml 파일로 추출한 다음 전체 매개변수 개체를 default_options에 할당하면 됩니다. 그런 다음 해당 매개변수 값을 얻으려면 $this->getParameter(를 직접 사용할 수 있습니다. 'knp_paginator_options')['page_name']을 얻었습니다.

도움이 되셨으면 좋겠습니다~

우선 Symfony 구성에 대한 이해가 잘못되었습니다!

먼저 $this->getParameter() 메소드 이름에서 알 수 있듯이 읽어오는 내용은 parameters 필드 아래의 매개변수여야 합니다. 읽으려는 매개변수가 반드시 parameters 필드 아래에 있을 필요는 없습니다. 추가 조사가 필요합니다(먼저 공식 문서에서 이와 관련된 지침을 확인해야 하며, 그렇지 않은 경우 계속 읽어보세요).

둘째, KnpPaginatorBundle이 타사 Bundle의 구성은 Bundle의 종속성 주입 확장 클래스(Dependency Injection (DI) Extension)KnpBundlePaginatorBundleDependencyInjectionKnpPaginatorExtension인 이 클래스를 통해 로드됩니다. 다음 코드는 이 클래스의 load 메서드에서 발췌한 것입니다.

<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>
로그인 후 복사

위의 코드를 보면, 이 Bundle는 총 4개의 매개변수를 정의하고 있는 것을 알 수 있습니다. $this->getParameter() 메소드를 통해 이 4개의 매개변수를 얻을 수 있습니다.

<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>
로그인 후 복사

마지막으로 다른 매개변수는 Bundle 작성자가 종속성 주입 확장 클래스에서 매개변수 형태로 개발자에게 노출하지 않았기 때문에 $this->getParameter() 메서드를 통해 얻을 수 없습니다.

관련 문서 링크는 다음과 같습니다. 번들 내부에 서비스 구성을 로드하는 방법

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿