Drupal 9의 사용자 정의 모듈 및 DB 테이블
1단계: 모듈 이름
'modules/custom' 폴더 아래에 사용자 정의 모듈을 생성해야 합니다. 폴더 이름을 'userinfo'로 지정합니다.
2단계: info.yml 파일 생성
Drupal이 모듈을 인식할 수 있도록 모듈의 컴퓨터 이름으로 yaml 파일을 생성해야 합니다. 파일 이름을 'userinfo.info.yml'로 지정합니다.
name: User Info
type: module
description: A custom module to enter user information
package: Custom
version: 1.0
core_version_requirement: ^8 || ^9
3단계: routing.yml 파일 만들기
다음 단계는 'userinfo' 디렉터리 아래에 userinfo.routing.yml 파일을 추가하는 것입니다.
경로 아래에 사용자 정보를 추가하기 위한 URL 경로를 지정합니다.
userinfo.form:
path: '/add-user-info'
defaults:
_title: 'Add User Info'
_form: '\Drupal\userinfo\Form\UserinfoForm'
requirements:
_permission: 'access content'
4단계: 양식 추가
'modules/custom/userinfo/src/Form' 아래에 'UserinfoForm.php'라는 양식을 생성합니다. 이 파일에서 사용자 정보를 확인하고 제출하기 위한 사용자 지정 양식을 만듭니다.
<?php
/**
* @file
* Contains \Drupal\userinfo\Form\UserinfoForm.
*/
namespace Drupal\userinfo\Form;
use Drupal\Core\Form\FormBase;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Database\Database;
use Drupal\Core\Url;
use Drupal\Core\Routing;
class UserinfoForm extends FormBase {
/**
* {@inheritdoc}
*/
public function getFormId() {
return 'userinfo_form';
}
/**
* {@inheritdoc}
*/
public function buildForm(array $form, FormStateInterface $form_state) {
$form['form_info'] = array(
'#markup' => '<h4>Saving User Info in a custom table in the database</h4><br>',
);
$form['first_name'] = array(
'#type' => 'textfield',
'#title' => t('First Name'),
'#required' => TRUE,
'#maxlength' => 50,
'#default_value' => '',
);
$form['last_name'] = array(
'#type' => 'textfield',
'#title' => t('Last Name'),
'#required' => TRUE,
'#maxlength' => 50,
'#default_value' => '',
);
$form['user_email'] = array(
'#type' => 'textfield',
'#title' => t('Email-ID'),
'#required' => TRUE,
'#maxlength' => 50,
'#default_value' => '',
);
$form['user_age'] = [
'#type' => 'textfield',
'#title' => t('Age'),
'#required' => TRUE,
'#maxlength' => 20,
'#default_value' => '',
];
$form['user_city'] = array(
'#type' => 'textfield',
'#title' => t('City'),
'#required' => TRUE,
'#maxlength' => 50,
'#default_value' => '',
);
$form['actions']['#type'] = 'actions';
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => $this->t('Save Info'),
'#button_type' => 'primary',
);
return $form;
}
/**
* {@inheritdoc}
*/
public function validateForm(array &$form, FormStateInterface $form_state) {
if ($form_state->getValue('first_name') == '') {
$form_state->setErrorByName('first_name', $this->t('Please Enter First Name'));
}
if ($form_state->getValue('last_name') == '') {
$form_state->setErrorByName('last_name', $this->t('Please Enter Last Name'));
}
if ($form_state->getValue('user_email') == '') {
$form_state->setErrorByName('user_email', $this->t('Please Enter Email-ID'));
}
if ($form_state->getValue('user_age') == '') {
$form_state->setErrorByName('user_age', $this->t('Please Enter Age'));
}
if ($form_state->getValue('user_city') == '') {
$form_state->setErrorByName('user_city', $this->t('Please Enter City'));
}
}
/**
* {@inheritdoc}
*/
public function submitForm(array &$form, FormStateInterface $form_state) {
try{
$conn = Database::getConnection();
$field = $form_state->getValues();
$fields["first_name"] = $field['first_name'];
$fields["last_name"] = $field['last_name'];
$fields["user_email"] = $field['user_email'];
$fields["user_age"] = $field['user_age'];
$fields["user_city"] = $field['user_city'];
$conn->insert('user_info')
->fields($fields)->execute();
\Drupal::messenger()->addMessage(t("User info has been succesfully saved"));
}
catch(Exception $ex){
\Drupal::logger('userinfo')->error($ex->getMessage());
}
}
}
5단계: 테이블 스키마 생성
이제 'userinfo.install' 파일에 사용자 정보를 저장할 데이터베이스 테이블 스키마를 생성하겠습니다. 이 파일을 모듈 루트 폴더에 배치합니다.
테이블 이름은 user_id, first_name, last_name, user_email, user_age & user_city 필드가 있는 'user_info'입니다.
<?php
use Drupal\Core\Database\Database;
/**
* Implements hook_schema().
*/
function userinfo_schema(){
$schema['user_info'] = array(
'description' => 'The table for storing the user information',
'fields' => array(
'user_id' => array(
'description' => 'Primary identifier for User',
'type' => 'serial',
'not null' => TRUE,
'unsigned' => TRUE,
),
'first_name' => array(
'description' => 'User First Name',
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
'default' => '',
),
'last_name' => array(
'description' => 'User Last Name.',
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
'default' => '',
),
'user_email' => array(
'description' => 'User Email ID',
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
),
'user_age' => array(
'description' => 'Age of User',
'type' => 'int',
'length' => 100,
'not null' => TRUE,
),
'user_city' => array(
'description' => 'User City',
'type' => 'varchar',
'length' => 255,
'not null' => TRUE,
'default' => '',
),
),
'primary key' => array('user_id'),
);
return $schema;
}
모든 것이 완료되면 모듈을 활성화하고 라우팅 파일에 언급된 URL을 누를 수 있습니다.
Reference
이 문제에 관하여(Drupal 9의 사용자 정의 모듈 및 DB 테이블), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/rahulk1011/custom-module-db-table-in-drupal-9-9in텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)