모듈에 사용자 정의 클래스 파일을 포함 시키려면 어떻게합니까?


10

Drupal 7 모듈 개발 에서 module.info 파일 또는 drupal_load_included () 함수 의 file [] = 지시문을 사용하여 사용자 정의 inc, api 또는 php 클래스 파일을 포함시킬 수 있습니다 .

PSR을 사용하는 D8에서 "일반 OLE PHP 객체"를 패키징하고 참조하는 올바른 방법은 무엇 DefaultController.php입니까? 다음과 같이 생각하십시오 $a = new POPO();.

클래스를 포함하는 PHP 파일에 namespace충분합니까? 컨트롤러 (또는 일반적으로 모듈)는 해당 클래스를 참조하거나 스캔하는 방법을 어떻게 알 수 있습니까?



예, drupal.org/node/2087879읽었 지만 file [] = 지시문을 보지 않아도 불행히도 파일 포함에 대한 특정 질문에 대답하지 못했습니다.
Rick

답변:


11

file[] = ...더 이상 사용 하지 않습니다. 대신 클래스가 자동로드됩니다. 예를 들어 다음과 같은 파일 구조의 모듈이 있습니다.

  • views_hybrid /
    • views_hybrid.info.yml
    • views_hybrid.module
    • src /
      • 플러그인/
        • 들/
          • FieldFormatter /
            • HybridFormatter.php

HybridFormatter.php HybridFormatter라는 클래스를 정의합니다.

내 .module 파일에서 IDE (이 경우 NetBeans)를 입력하기 시작 HybridFormatter하면 자동 \Drupal\views_hybrid\Plugin\Field\FieldFormatter\HybridFormatter::로드되기 때문에 자동 완성됩니다 . 모듈 전체를 가로 지르는 전체 경로를 원하지 않기 때문에 맨 위에 선을 배치했습니다.

use Drupal\views_hybrid\Plugin\Field\FieldFormatter\HybridFormatter;

use모듈과 함께 사용하기 위해 포함하는 다른 클래스에 대한 지시문 과 함께 .

네임 스페이스는 HybridFormatter.php에 다음과 같이 정의되어 있습니다.

namespace Drupal\views_hybrid\Plugin\Field\FieldFormatter;

class HybridFormatter extends FormatterBase { ... }

그래서 완전히 이해하기 위해 HybridFormatter.php가 자동로드됩니다 ... 자동으로? include_once ()가 필요하지 않습니까? HybridFormatter.php에 네임 스페이스가 정의되어 있습니까?
Rick

필요가 없다 include_once거나 require_once또는 아무것도가. Hybridformatter.php는 네임 스페이스를 정의합니다. 답변에 포함하겠습니다.
beth

@beth 도와 주실 수 있습니까? drupal.stackexchange.com/questions/233565/…
RobinSon

9

D8 "플러그인, 컨트롤러, 폼 등"에 맞지 않는 커스텀 클래스를 포함시키기 위해 추가하고 싶습니다. 기본적으로 PSR-4 개요에 명시된대로 계속 할 수 있습니다.

유스 케이스의 경우 / modules / custom / my_module / src /에 "CustomClass.php"를 삭제했습니다. 파일 시작 부분에 네임 스페이스 선언이 포함되었습니다.

namespace Drupal\my_module;

파일 에서이 파일을 사용하려고했습니다 (이 경우 my_theme.theme)

use Drupal\my_module\CustomClass;
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.