Drupal 9의 사용자 정의 모듈 및 DB 테이블

8261 단어 drupaldrupal9
Drupal 9에서 사용자 정의 모듈을 생성하여 사용자 정의 양식을 작성하고 데이터베이스의 사용자 정의 테이블에 데이터를 저장할 것입니다.

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을 누를 수 있습니다.

좋은 웹페이지 즐겨찾기