위에서 언급 한 코드에는 이미 <code class="language-sql">INSERT INTO `demo_projects` (`id`, `name`, `description`, `deadline`)
VALUES
(1, 'Summer House', 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', 1397501105),
(2, 'Winter House', 'Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.', 1397501132);</code>
가 포함되어 있습니다
EntityApicOntroller 클래스 (모듈 ENTITY.CONTROLLER.INC 파일에 위치)는 처리 엔티티에 대한 합리적인 기본값을 제공합니다. 기본 Drupal Core DrupaldEfaultentityController 클래스를 확장하고 CRUD 작업을 수행하는 (다른 많은 것들 중에서도) 책임이 있습니다.
두 클래스 모두 사용자 정의 모듈에서 확장하여 기능을 조정할 수 있습니다 (예 : 쿼리,로드 또는 엔티티 표시). 나중에이 작업을 수행하는 방법을 볼 것입니다.
그러나 먼저, 새로운 엔티티를 저장하는 방법을 보여 드리고 싶습니다. 현재 데이터베이스에는 ID 1과 2가있는 2 개의 레코드가 있습니다. 위의 테스트 페이지 콜백 함수에 쓴 코드를 조정하여 ID 3이없는 새 엔티티를 만들고 싶습니다. 다음과 같이 보일 수 있습니다
보시다시피, 이제 우리는 3 개의 프로젝트 엔티티를로드하고 세 번째 엔티티가 있는지 확인하려고합니다. 존재하지 않으면 엔티티 API가 제공하는 entity_create () 도우미 함수를 사용하고 속성을 임의의 값으로 설정 한 다음 엔티티의 Save () 메소드를 사용하여 데이터베이스에 지속됩니다. 이 메소드는 엔티티 클래스에서 제공하며 그 작업은 위에서 정의한 컨트롤러 클래스에서 Save () 메소드를 호출하는 것입니다. 이 방법은 엔티티를 지속하는 데 필요한 논리를 수행합니다. 그러나이 모든 것은 무대 뒤에서 발생합니다. 우리는 그것에 대해 걱정할 필요가 없습니다.
페이지를 다시로드하면 2 개의 프로젝트 엔티티 만 반환해야하지만 두 번째로는 3이 있어야합니다. <code class="language-php">/**
* Implements hook_schema().
*/
function demo_schema() {
$schema = array();
$schema['demo_projects'] = array(
'description' => 'The base table for the Project entity',
'fields' => array(
'id' => array(
'description' => 'Primary key of the Project entity',
'type' => 'serial',
'unsigned' => TRUE,
'not null' => TRUE,
),
'name' => array(
'description' => 'Project name.',
'type' => 'varchar',
'length' => 255,
'not null' => FALSE,
),
'description' => array(
'description' => 'Project description.',
'type' => 'text',
'size' => 'big',
'not null' => FALSE,
'default' => NULL
),
'deadline' => array(
'description' => 'Project deadline.',
'type' => 'int',
'length' => 11,
'not null' => FALSE,
),
),
'primary key' => array('id'),
);
return $schema;
}</code>
는 엔티티 클래스 를 커버합니다
이 튜토리얼 의이 부분에서 마지막으로 보여주고 싶은 것은 엔티티를 표시하는 방법입니다. 이를 위해 사용중인 페이지 콜백 기능을 고수하여 실제 목록으로 렌더링합니다.
먼저, 기본 EntyApicOntroller 클래스의 buildContent () 메소드를 무시해야합니다. 그 이유는 컨트롤러가 데이터에 대해 가정 할 수 없으므로 표시 방법에 대한 정보를 제공해야합니다. 먼저, 이전 클래스를 확장하는 컨트롤러 클래스를 선언 해 봅시다 :
클래스 이름 ProjectentityController를 선택했습니다. hook_entity_info () 구현에서 컨트롤러 클래스 키에 대해 설정 한 값을 교체해야합니다. 잊지 마세요.
이 클래스에서는 원래 클래스에서 메소드 이름을 복사하여 부모 클래스가 반환하는 것을 반환 할 수 있습니다.
이 클래스에서는 원래 클래스에서 메소드 이름을 복사하여 상위 클래스가 반환되는 것을 반환 할 수 있습니다. 우리는 기본적으로 두 개의 새로운 항목을 배열에 추가했습니다. 첫 번째는 설명을 로 랩핑하고 두 번째는 단락 레이블 사이의 형식 날짜를 출력합니다. 이것은 기본 드 루팔 테마입니다. 여기서 무슨 일이 일어나고 있는지 이해하지 못하면 검토하십시오. 그러나 누락 된 프로젝트 이름을 알 수 있습니다. Drupal은 hook_entity_info ()가 구현 한 엔티티 키에서 태그로 지정하기 때문에 자동으로 렌더링합니다. 마지막 단계는 페이지 콜백 함수로 이동하여 엔티티를 표시하는 것입니다. 빠른 방법 (데모 목적으로 만) :
이전과 마찬가지로 먼저 해당 ID로 엔티티를로드합니다. 그런 다음 Entity_View () 도우미 함수를 통해 실행합니다. 결국 방금 덮어 쓴 BuildContent () 메소드를 호출합니다. 이 함수는 각 엔티티의 렌더링 된 배열 목록을 반환합니다. 우리는 각각을 렌더링하고 결과를 $ 출력 배열에 저장 한 다음 그것을 연결하고 반환합니다.
페이지를 새로 고칠 수 있으며로드 한 모든 엔티티 목록이 표시됩니다. 변경 사항이 보이도록 캐시가 지워 있는지 확인하십시오.
결론
이 튜토리얼에서 우리는 코드의 엔티티 유형을 정의하여 Drupal의 엔티티에 대해 배우기 시작합니다. 우리는 그들이 나타내는 데이터에 대한 스키마 정의를 작성하는 방법과 Drupal에 등록하는 방법을 배웠습니다. 그런 다음 엔티티 API Contrib 모듈을 사용하여 엔티티를 객체 지향적 인 방식으로 처리하는 힘을 볼 수 있습니다.
이 튜토리얼의 두 번째 부분에서는 세 가지 주요 측면을 살펴 보겠습니다. 먼저 개별 프로젝트 엔티티를 표시하고 프로젝트 관리를위한 관리 인터페이스를 시작하기위한 일부 페이지를 만들 것입니다. 둘째, 우리는 UI를 통해 그것을 수비 할 수있게 할 것입니다. 셋째, 적절한 쿼리 및 목록 디스플레이를 수행 할 수 있도록 조회수에 노출됩니다. 계속 지켜봐!
Drupal에서 맞춤형 엔티티를 구축 할 때 FAQ
Drupal Custom Entity를 만들기위한 전제 조건은 무엇입니까?
Drupal Custom Entities를 만들기 전에 Drupal의 엔티티 API에 대한 기본적인 이해가 있어야합니다. 또한 PHP 개념 및 객체 지향 프로그래밍의 개념에 익숙해야합니다. 또한 Drupal 개발 환경을 설정해야합니다. 여기에는 로컬 컴퓨터 또는 서버에 Drupal을 설치하고 구성하는 것이 포함됩니다.
Drupal에 번들이있는 사용자 정의 컨텐츠 엔티티를 만드는 방법은 무엇입니까?
Drupal에 번들이있는 사용자 정의 컨텐츠 엔티티 작성에는 여러 단계가 포함됩니다. 먼저, 엔티티와 해당 속성을 사용자 정의 모듈에서 정의해야합니다. 그런 다음 엔티티를 추가하고 편집하려면 양식을 작성해야합니다. 그런 다음 엔터티 운영의 경로를 정의해야합니다. 마지막으로 엔티티를 표시하려면 뷰 빌더를 만들어야합니다.
Drupal의 컨텐츠 엔티티와 구성 엔티티의 차이점은 무엇입니까?
Drupal의 컨텐츠 엔티티는 사용자가 작성, 편집 및 삭제할 수있는 컨텐츠 조각입니다. 예로는 노드, 사용자 및 댓글이 있습니다. 반면, 구성 엔티티는 데이터베이스에 저장된 구성 조각이며 코드로 내보낼 수 있습니다. 예로는 뷰, 이미지 스타일 및 사용자 역할이 있습니다.
Drupal 8에서 컨텐츠 엔티티 유형을 만드는 방법은 무엇입니까?
Drupal 8에서 컨텐츠 엔티티 유형 생성에는 사용자 정의 모듈에서 엔티티와 해당 속성을 정의하는 것이 포함됩니다. 또한 엔티티를 추가하고 편집 할 수있는 양식을 작성하고 엔티티 작업의 경로를 정의하고 뷰 빌더를 만들어 엔티티를 표시해야합니다.
엔티티 API 모듈을 사용하여 Drupal에서 사용자 정의 엔티티를 만들 수 있습니까?
예, 엔티티 API 모듈을 사용하여 Drupal에서 사용자 정의 엔티티를 만들 수 있습니다. 이 모듈은 엔티티와 해당 속성을 처리하는 통일 된 방법을 제공합니다. 또한 제작, 읽기, 업데이트 및 삭제와 같은 엔티티에서 작업을 수행하기위한 API를 제공합니다.
Drupal Custom Entities를 만드는 것의 이점은 무엇입니까?
Drupal 사용자 정의 엔티티 작성을 사용하면 자신의 데이터 구조 및 비즈니스 로직을 정의 할 수 있습니다. 이를 통해 사이트를보다 효율적이고 관리 가능하게 할 수 있습니다. Custom Entities를 사용하면 Drupal의 엔티티 API를 활용하여 엔티티를 처리 할 수있는 강력한 도구를 제공합니다. Drupal의 사용자 정의 엔티티에 필드를 추가하는 방법은 무엇입니까?
Drupal의 사용자 정의 엔터티에 필드를 추가하려면 Field API를 사용해야합니다. 여기에는 엔티티의 기본 필드 정의 방법에서 필드를 정의하는 것이 포함됩니다. Field UI 모듈을 사용하여 Drupal Management 인터페이스를 통해 엔티티에 필드를 추가 할 수도 있습니다.
Drupal에 사용자 정의 엔티티를 표시하는 방법은 무엇입니까?
Drupal에 사용자 정의 엔터티를 표시하려면 엔티티의 뷰 빌더를 만들어야합니다. 여기에는 EntityViewBuilder 클래스를 확장하고보기 메소드를 구현하는 클래스를 정의하는 것이 포함됩니다. Views 모듈을 사용하여 엔티티의 사용자 정의보기를 만들 수도 있습니다.
Drupal에서 사용자 정의 엔티티를 추가하고 편집하기위한 양식을 만드는 방법은 무엇입니까?