SlideShare a Scribd company logo
1 of 39
Drupal 8
DBに保存して読み込む
2019年7月5日
ホス
目次
1. カスタムモジュールの基礎を作る
→ Hello World
2. フォーム画面を作る
→ DBへ保存する機能を作る
3. 表の表示画面を作る
→ DBから読み込む機能を作る
1.カスタムモジュール
の基礎を作る
カスタムモジュールの基礎を作る
〜このようなものを作ります
〜
カスタムモジュールの基礎を作る
〜ディレクトリの作成〜
• モジュール用のディレクトリを作る
• ソース保存用のディレクトリを作る
mkdir /path/to/drupal/modules/animalbook
cd /path/to/drupal/modules/animalbook
mkdir src
mkdir src/Controller
mkdir src/Form
カスタムモジュールの基礎を作る
〜メタ情報ファイルの作成〜
vim animalbook.info.yml
name: The Animalbook module
type: module
description: 'Animalbook module'
core: 8.x
カスタムモジュールの基礎を作る
~コントローラファイル作成~
vim src/Controller/AnimalbookController.php
<?php
namespace DrupalanimalbookController;
use DrupalCoreControllerControllerBase;
class AnimalbookController extends ControllerBase {
public function content() {
return array(
'#markup' => '' . t('Hello!') . '',
);
}
}
HTMLで Hello! を出力する
class名は
ファイル名と同じ
Drupal8のControllerBaseを継
承
class名は
ファイル名と同じ
カスタムモジュールの基礎を作る
~ルーティングファイル作成~
vim animalbook.routing.yml
animalbook:
path: '/animalbook'
defaults:
_title: 'Animalbook Page'
_controller: 'DrupalanimalbookControllerAnimalbookController::content'
requirements:
_permission: 'access content'
このpathにアクセスしたとき
このcontrollerを呼び出す
「access content」という
デフォルトのロール
カスタムモジュールの基礎を作る
~モジュールインストール~
管理画面
→ 拡張機能
→ インストール
カスタムモジュールの基礎を作る
~Hello World!完成~
AnimalbookController.phpで
書いたとおり
Hello!が表示されている
2.フォーム画面を作る
フォーム画面を作る
〜このようなものを作ります
〜
フォーム画面を作る
〜vim src/Form/InputForm.php〜
• 完成図
vim src/Form/InputForm.php
<?php
namespace DrupalanimalbookForm;
use DrupalCoreFormFormBase;
use DrupalCoreFormFormStateInterface;
use DrupalCoreDatabaseDatabase;
class InputForm extends FormBase {
public function getFormId() {
return 'default_form';
}
public function buildForm(array $form,
FormStateInterface $form_state) {
$typelist = array(
$typelist = array(
'MAMMALS' => t('哺乳類'),
'BIRDS' => t('鳥類'),
'REPTILES' => t('爬虫類'),
'AMPHIBIANS' => t('両生類'),
'FISH' => t('魚類'),
);
public function validateForm(array &$form,
FormStateInterface $form_state) {
parent::validateForm($form, $form_state);
}
public function submitForm(array &$form,
FormStateInterface $form_state) {
// Display result.
foreach ($form_state->getValues() as $key => $value) {
drupal_set_message($key . ': ' . $value);
}
// Save to Database.
$conn = Database::getConnection();
$conn->insert('module_animalbook_data')->fields(
array(
'name' => $form_state->getValue('name'),
'type' => $form_state->getValue('type'),
)
)->execute();
}
}
$form['name'] = array(
'#type' => 'textfield',
'#title' => $this->t('Name'),
'#required' => TRUE,
);
$form['type1'] = array(
'#type' => 'select',
'#title' => 'タイプ',
'#options' => $typelist,
'#required' => TRUE,
);
$form['submit'] = [
'#type' => 'submit',
'#value' => $this->t('Save'),
];
return $form;
}
フォーム画面を作る
〜vim src/Form/InputForm.php〜
• 完成図
vim src/Form/InputForm.php
<?php
namespace DrupalanimalbookForm;
use DrupalCoreFormFormBase;
use DrupalCoreFormFormStateInterface;
use DrupalCoreDatabaseDatabase;
class InputForm extends FormBase {
public function getFormId() {
return 'default_form';
}
public function buildForm(array $form,
FormStateInterface $form_state) {
$typelist = array(
$typelist = array(
'MAMMALS' => t('哺乳類'),
'BIRDS' => t('鳥類'),
'REPTILES' => t('爬虫類'),
'AMPHIBIANS' => t('両生類'),
'FISH' => t('魚類'),
);
public function validateForm(array &$form,
FormStateInterface $form_state) {
parent::validateForm($form, $form_state);
}
public function submitForm(array &$form,
FormStateInterface $form_state) {
// Display result.
foreach ($form_state->getValues() as $key => $value) {
drupal_set_message($key . ': ' . $value);
}
// Save to Database.
$conn = Database::getConnection();
$conn->insert('module_animalbook_data')->fields(
array(
'name' => $form_state->getValue('name'),
'type' => $form_state->getValue('type'),
)
)->execute();
}
}
$form['name'] = array(
'#type' => 'textfield',
'#title' => $this->t('Name'),
'#required' => TRUE,
);
$form['type1'] = array(
'#type' => 'select',
'#title' => 'タイプ',
'#options' => $typelist,
'#required' => TRUE,
);
$form['submit'] = [
'#type' => 'submit',
'#value' => $this->t('Save'),
];
return $form;
}
// Save to Database.
$conn = Database::getConnection();
$conn->insert('module_animalbook_data')->fields(
array(
'name' => $form_state->getValue('name'),
'type' => $form_state->getValue('type'),
)
)->execute();
フォーム画面を作る
〜vim src/Form/InputForm.php〜
• 完成図
vim src/Form/InputForm.php
<?php
namespace DrupalanimalbookForm;
use DrupalCoreFormFormBase;
use DrupalCoreFormFormStateInterface;
use DrupalCoreDatabaseDatabase;
class InputForm extends FormBase {
public function getFormId() {
return 'default_form';
}
public function buildForm(array $form,
FormStateInterface $form_state) {
$typelist = array(
$typelist = array(
'MAMMALS' => t('哺乳類'),
'BIRDS' => t('鳥類'),
'REPTILES' => t('爬虫類'),
'AMPHIBIANS' => t('両生類'),
'FISH' => t('魚類'),
);
public function validateForm(array &$form,
FormStateInterface $form_state) {
parent::validateForm($form, $form_state);
}
public function submitForm(array &$form,
FormStateInterface $form_state) {
// Display result.
foreach ($form_state->getValues() as $key => $value) {
drupal_set_message($key . ': ' . $value);
}
// Save to Database.
$conn = Database::getConnection();
$conn->insert('module_animalbook_data')->fields(
array(
'name' => $form_state->getValue('name'),
'type' => $form_state->getValue('type'),
)
)->execute();
}
}
$form['name'] = array(
'#type' => 'textfield',
'#title' => $this->t('Name'),
'#required' => TRUE,
);
$form['type1'] = array(
'#type' => 'select',
'#title' => 'タイプ',
'#options' => $typelist,
'#required' => TRUE,
);
$form['submit'] = [
'#type' => 'submit',
'#value' => $this->t('Save'),
];
return $form;
}
// Save to Database.
$conn = Database::getConnection();
$conn->insert('module_animalbook_data')->fields(
array(
'name' => $form_state->getValue('name'),
'type' => $form_state->getValue('type'),
)
)->execute();
DBに接続
フォーム画面を作る
〜vim src/Form/InputForm.php〜
• 完成図
vim src/Form/InputForm.php
<?php
namespace DrupalanimalbookForm;
use DrupalCoreFormFormBase;
use DrupalCoreFormFormStateInterface;
use DrupalCoreDatabaseDatabase;
class InputForm extends FormBase {
public function getFormId() {
return 'default_form';
}
public function buildForm(array $form,
FormStateInterface $form_state) {
$typelist = array(
$typelist = array(
'MAMMALS' => t('哺乳類'),
'BIRDS' => t('鳥類'),
'REPTILES' => t('爬虫類'),
'AMPHIBIANS' => t('両生類'),
'FISH' => t('魚類'),
);
public function validateForm(array &$form,
FormStateInterface $form_state) {
parent::validateForm($form, $form_state);
}
public function submitForm(array &$form,
FormStateInterface $form_state) {
// Display result.
foreach ($form_state->getValues() as $key => $value) {
drupal_set_message($key . ': ' . $value);
}
// Save to Database.
$conn = Database::getConnection();
$conn->insert('module_animalbook_data')->fields(
array(
'name' => $form_state->getValue('name'),
'type' => $form_state->getValue('type'),
)
)->execute();
}
}
$form['name'] = array(
'#type' => 'textfield',
'#title' => $this->t('Name'),
'#required' => TRUE,
);
$form['type1'] = array(
'#type' => 'select',
'#title' => 'タイプ',
'#options' => $typelist,
'#required' => TRUE,
);
$form['submit'] = [
'#type' => 'submit',
'#value' => $this->t('Save'),
];
return $form;
}
// Save to Database.
$conn = Database::getConnection();
$conn->insert('module_animalbook_data')->fields(
array(
'name' => $form_state->getValue('name'),
'type' => $form_state->getValue('type'),
)
)->execute();
nameとtypeのフィールドの値を
insert:挿入
フォーム画面を作る
〜vim src/Form/InputForm.php〜
• 完成図
vim src/Form/InputForm.php
<?php
namespace DrupalanimalbookForm;
use DrupalCoreFormFormBase;
use DrupalCoreFormFormStateInterface;
use DrupalCoreDatabaseDatabase;
class InputForm extends FormBase {
public function getFormId() {
return 'default_form';
}
public function buildForm(array $form,
FormStateInterface $form_state) {
$typelist = array(
$typelist = array(
'MAMMALS' => t('哺乳類'),
'BIRDS' => t('鳥類'),
'REPTILES' => t('爬虫類'),
'AMPHIBIANS' => t('両生類'),
'FISH' => t('魚類'),
);
public function validateForm(array &$form,
FormStateInterface $form_state) {
parent::validateForm($form, $form_state);
}
public function submitForm(array &$form,
FormStateInterface $form_state) {
// Display result.
foreach ($form_state->getValues() as $key => $value) {
drupal_set_message($key . ': ' . $value);
}
// Save to Database.
$conn = Database::getConnection();
$conn->insert('module_animalbook_data')->fields(
array(
'name' => $form_state->getValue('name'),
'type' => $form_state->getValue('type'),
)
)->execute();
}
}
$form['name'] = array(
'#type' => 'textfield',
'#title' => $this->t('Name'),
'#required' => TRUE,
);
$form['type1'] = array(
'#type' => 'select',
'#title' => 'タイプ',
'#options' => $typelist,
'#required' => TRUE,
);
$form['submit'] = [
'#type' => 'submit',
'#value' => $this->t('Save'),
];
return $form;
}
// Save to Database.
$conn = Database::getConnection();
$conn->insert('module_animalbook_data')->fields(
array(
'name' => $form_state->getValue('name'),
'type' => $form_state->getValue('type'),
)
)->execute();
実行
フォーム画面を作る
~ルーティングファイル編集~
• 追記する
vim animalbook.routing.yml
animalbook.default_form:
path: '/animalbook/form/input'
defaults:
_form: 'DrupalanimalbookFormInputForm'
_title: 'InputForm'
requirements:
_access: 'TRUE'
このpathにアクセスしたとき
このFormを呼び出す
誰でもアクセス可、ログイン不要
フォーム画面を作る
~DBのテーブル定義作成~
vim animalbook.install
<?php
function animalbook_schema() {
$schema['module_animalbook_data'] = [
'description' => 'Module Animalbook data.',
'fields' => array(
'id' => array(
'description' => 'id',
'type' => 'serial',
'not null' => TRUE,
),
'name' => array(
'description' => 'Character Name',
'type' => 'varchar',
'length' => 256,
'not null' => TRUE,
),
'type' => array(
'description' => 'Type',
'type' => 'varchar',
'length' => 256,
'not null' => TRUE,
),
),
'primary key' => array('id'),
];
return $schema;
}
DBのテーブル名
フォーム画面を作る
~モジュール再インストール~
管理画面
→ 拡張機能
→ アンインストール
フォーム画面を作る
~モジュール再インストール~
管理画面
→ 拡張機能
→ インストール
フォーム画面を作る
~フォームが表示された~
フォーム画面を作る
~フォームが表示された~
フォーム画面を作る
~入力して保存してみる~
•
フォームに入力した内容が
表示されている
フォーム画面を作る
~DBに保存されている~
SQL文
このテーブルのすべてのデータを取得する
id、name、typeが保存されている
mySQLコマンド
3.表の表示画面を作る
フォーム画面を作る
〜このようなものを作ります
〜
• 完成図
表の表示画面を作る
~表を表示するForm作成~
vim src/Form/ListForm.php
<?php
namespace DrupalanimalbookForm;
use DrupalCoreFormFormBase;
use DrupalCoreFormFormStateInterface;
use DrupalCoreDatabaseDatabase;
class ListForm extends FormBase {
function __construct() {
}
public function getFormId() {
return 'default_form';
}
// Initialize an empty array
$output = array();
// Next, loop through the $results array
foreach ($results as $result) {
$output[$result->id] = [
'id' => $result->id,
'name' => $result->name,
'type' => $result->type,
];
}
$form['table'] = [
'#type' => 'tableselect',
'#header' => $header,
'#options' => $output,
'#empty' => t('No users found'),
];
return $form;
}
public function buildForm(array $form,
FormStateInterface $form_state) {
//データベースからデータを取得する
$conn = Database::getConnection();
$query = $conn
->select('module_animalbook_data', 'x')
->fields('x', array('id', 'name', 'type'));
$data = $query->execute();
//条件に合致するものを配列にして返す
#$result = $data->fetchCol();
$results = $data->fetchAll();
//var_dump($results);
//ヘッダー作成
$header = [
'id' => t('ID'),
'name' => t('Name'),
'type' => t('Type'),
];
• 完成図
<?php
namespace DrupalanimalbookForm;
use DrupalCoreFormFormBase;
use DrupalCoreFormFormStateInterface;
use DrupalCoreDatabaseDatabase;
class ListForm extends FormBase {
function __construct() {
}
public function getFormId() {
return 'default_form';
}
// Initialize an empty array
$output = array();
// Next, loop through the $results array
foreach ($results as $result) {
$output[$result->id] = [
'id' => $result->id,
'name' => $result->name,
'type' => $result->type,
];
}
$form['table'] = [
'#type' => 'tableselect',
'#header' => $header,
'#options' => $output,
'#empty' => t('No users found'),
];
return $form;
}
public function buildForm(array $form,
FormStateInterface $form_state) {
//データベースからデータを取得する
$conn = Database::getConnection();
$query = $conn
->select('module_animalbook_data', 'x')
->fields('x', array('id', 'name', 'type'));
$data = $query->execute();
//条件に合致するものを配列にして返す
#$result = $data->fetchCol();
$results = $data->fetchAll();
//var_dump($results);
//ヘッダー作成
$header = [
'id' => t('ID'),
'name' => t('Name'),
'type' => t('Type'),
];
表の表示画面を作る
~表を表示するForm作成~
vim src/Form/ListForm.php
//データベースからデータを取得する
$conn = Database::getConnection();
$query = $conn
->select('module_animalbook_data', 'x')
->fields('x', array('id', 'name', 'type'));
$data = $query->execute();
• 完成図
<?php
namespace DrupalanimalbookForm;
use DrupalCoreFormFormBase;
use DrupalCoreFormFormStateInterface;
use DrupalCoreDatabaseDatabase;
class ListForm extends FormBase {
function __construct() {
}
public function getFormId() {
return 'default_form';
}
// Initialize an empty array
$output = array();
// Next, loop through the $results array
foreach ($results as $result) {
$output[$result->id] = [
'id' => $result->id,
'name' => $result->name,
'type' => $result->type,
];
}
$form['table'] = [
'#type' => 'tableselect',
'#header' => $header,
'#options' => $output,
'#empty' => t('No users found'),
];
return $form;
}
public function buildForm(array $form,
FormStateInterface $form_state) {
//データベースからデータを取得する
$conn = Database::getConnection();
$query = $conn
->select('module_animalbook_data', 'x')
->fields('x', array('id', 'name', 'type'));
$data = $query->execute();
//条件に合致するものを配列にして返す
#$result = $data->fetchCol();
$results = $data->fetchAll();
//var_dump($results);
//ヘッダー作成
$header = [
'id' => t('ID'),
'name' => t('Name'),
'type' => t('Type'),
];
表の表示画面を作る
~表を表示するForm作成~
vim src/Form/ListForm.php
//データベースからデータを取得する
$conn = Database::getConnection();
$query = $conn
->select('module_animalbook_data', 'x')
->fields('x', array('id', 'name', 'type'));
$data = $query->execute();
DBに接続
• 完成図
<?php
namespace DrupalanimalbookForm;
use DrupalCoreFormFormBase;
use DrupalCoreFormFormStateInterface;
use DrupalCoreDatabaseDatabase;
class ListForm extends FormBase {
function __construct() {
}
public function getFormId() {
return 'default_form';
}
// Initialize an empty array
$output = array();
// Next, loop through the $results array
foreach ($results as $result) {
$output[$result->id] = [
'id' => $result->id,
'name' => $result->name,
'type' => $result->type,
];
}
$form['table'] = [
'#type' => 'tableselect',
'#header' => $header,
'#options' => $output,
'#empty' => t('No users found'),
];
return $form;
}
public function buildForm(array $form,
FormStateInterface $form_state) {
//データベースからデータを取得する
$conn = Database::getConnection();
$query = $conn
->select('module_animalbook_data', 'x')
->fields('x', array('id', 'name', 'type'));
$data = $query->execute();
//条件に合致するものを配列にして返す
#$result = $data->fetchCol();
$results = $data->fetchAll();
//var_dump($results);
//ヘッダー作成
$header = [
'id' => t('ID'),
'name' => t('Name'),
'type' => t('Type'),
];
表の表示画面を作る
~表を表示するForm作成~
vim src/Form/ListForm.php
//データベースからデータを取得する
$conn = Database::getConnection();
$query = $conn
->select('module_animalbook_data', 'x')
->fields('x', array('id', 'name', 'type'));
$data = $query->execute();
SQLのクエリを作成
select:検索
• 完成図
<?php
namespace DrupalanimalbookForm;
use DrupalCoreFormFormBase;
use DrupalCoreFormFormStateInterface;
use DrupalCoreDatabaseDatabase;
class ListForm extends FormBase {
function __construct() {
}
public function getFormId() {
return 'default_form';
}
// Initialize an empty array
$output = array();
// Next, loop through the $results array
foreach ($results as $result) {
$output[$result->id] = [
'id' => $result->id,
'name' => $result->name,
'type' => $result->type,
];
}
$form['table'] = [
'#type' => 'tableselect',
'#header' => $header,
'#options' => $output,
'#empty' => t('No users found'),
];
return $form;
}
public function buildForm(array $form,
FormStateInterface $form_state) {
//データベースからデータを取得する
$conn = Database::getConnection();
$query = $conn
->select('module_animalbook_data', 'x')
->fields('x', array('id', 'name', 'type'));
$data = $query->execute();
//条件に合致するものを配列にして返す
#$result = $data->fetchCol();
$results = $data->fetchAll();
//var_dump($results);
//ヘッダー作成
$header = [
'id' => t('ID'),
'name' => t('Name'),
'type' => t('Type'),
];
表の表示画面を作る
~表を表示するForm作成~
vim src/Form/ListForm.php
//データベースからデータを取得する
$conn = Database::getConnection();
$query = $conn
->select('module_animalbook_data', 'x')
->fields('x', array('id', 'name', 'type'));
$data = $query->execute();
DBへの問い合わせを実行
表の表示画面を作る
~ルーティングファイル編集~
• 追記する
vim animalbook.routing.yml
animalbook.list_form:
path: '/animalbook/form/list'
defaults:
_form: 'DrupalanimalbookFormListForm'
_title: 'ListForm'
requirements:
_access: 'TRUE'
このpathにアクセスしたとき
このFormを呼び出す
誰でもアクセス可、ログイン不要
フォーム画面を作る
~ページが表示されない?~
• ページが
見つからない!
• URLは
合ってるのに!
フォーム画面を作る
~キャッシュクリアが必要~
• ルーティングファイル
を変更したらクリア
• 管理画面
→ 環境設定
→ パフォーマンス
キャッシュクリアを実行
表の表示画面を作る
~フォームが表示された~
表の表示画面を作る
~フォームが表示された~
疑問・課題
• ルーティングファイルの「_access」で指定する
「access contents」と「TRUE」はどう違う?
• ViewのPHPソースには無駄がありそう
ソースをもっと理解して、リファクタリング
ご清聴
ありがとうございました

More Related Content

What's hot

プロになるためのJavaScript入門読書会 レジュメ
プロになるためのJavaScript入門読書会 レジュメプロになるためのJavaScript入門読書会 レジュメ
プロになるためのJavaScript入門読書会 レジュメ
Norito Agetsuma
 
俺のフックがこんなに簡単なわけがない。
俺のフックがこんなに簡単なわけがない。俺のフックがこんなに簡単なわけがない。
俺のフックがこんなに簡単なわけがない。
Hishikawa Takuro
 

What's hot (16)

Yahoo!ボックスAPI Hackathon向け資料
Yahoo!ボックスAPI Hackathon向け資料Yahoo!ボックスAPI Hackathon向け資料
Yahoo!ボックスAPI Hackathon向け資料
 
Yahoo!ボックスAPI Hackday資料
Yahoo!ボックスAPI Hackday資料Yahoo!ボックスAPI Hackday資料
Yahoo!ボックスAPI Hackday資料
 
プロになるためのJavaScript入門読書会 レジュメ
プロになるためのJavaScript入門読書会 レジュメプロになるためのJavaScript入門読書会 レジュメ
プロになるためのJavaScript入門読書会 レジュメ
 
iOSハンズオントレーニング データの永続化編(SQLite3, NSUserDefaults)
iOSハンズオントレーニング データの永続化編(SQLite3, NSUserDefaults)iOSハンズオントレーニング データの永続化編(SQLite3, NSUserDefaults)
iOSハンズオントレーニング データの永続化編(SQLite3, NSUserDefaults)
 
2012 keynote-2
2012 keynote-22012 keynote-2
2012 keynote-2
 
OSC京都2011
OSC京都2011OSC京都2011
OSC京都2011
 
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
「スピード」と「品質」を実現するPHP開発チームの取り組み~AngularJS+FuelPHP+AspectMock~
 
俺のフックがこんなに簡単なわけがない。
俺のフックがこんなに簡単なわけがない。俺のフックがこんなに簡単なわけがない。
俺のフックがこんなに簡単なわけがない。
 
Django boodoo
Django boodooDjango boodoo
Django boodoo
 
第一回Miim勉強会
第一回Miim勉強会第一回Miim勉強会
第一回Miim勉強会
 
大ざっぱにオブジェクト指向
大ざっぱにオブジェクト指向大ざっぱにオブジェクト指向
大ざっぱにオブジェクト指向
 
CakePHP でお小遣い帳をつくってみよう
CakePHP でお小遣い帳をつくってみようCakePHP でお小遣い帳をつくってみよう
CakePHP でお小遣い帳をつくってみよう
 
PHP classの教室
PHP classの教室PHP classの教室
PHP classの教室
 
CakePHP+Smartyハイブリッドによるラクラク開発
CakePHP+Smartyハイブリッドによるラクラク開発CakePHP+Smartyハイブリッドによるラクラク開発
CakePHP+Smartyハイブリッドによるラクラク開発
 
swooleを試してみた
swooleを試してみたswooleを試してみた
swooleを試してみた
 
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
【アシアル塾】PHPオブジェクト指向再入門・第一回クラスとオブジェクト
 

Similar to Drupal8 DBに保存して読み込む (8)

WordPress のキャッシュ機構
WordPress のキャッシュ機構WordPress のキャッシュ機構
WordPress のキャッシュ機構
 
WordPressで提供するWeb API
WordPressで提供するWeb APIWordPressで提供するWeb API
WordPressで提供するWeb API
 
PHP Object Injection入門
PHP Object Injection入門PHP Object Injection入門
PHP Object Injection入門
 
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
ISUCONで学ぶ Webアプリケーションのパフォーマンス向上のコツ 実践編 完全版
 
Teclab3
Teclab3Teclab3
Teclab3
 
BACKBONE.JSでMVC始めませんか?
BACKBONE.JSでMVC始めませんか?BACKBONE.JSでMVC始めませんか?
BACKBONE.JSでMVC始めませんか?
 
20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門20170923 excelユーザーのためのr入門
20170923 excelユーザーのためのr入門
 
Mojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてるMojoliciousをウェブ制作現場で使ってみてる
Mojoliciousをウェブ制作現場で使ってみてる
 

More from iPride Co., Ltd.

AWSで全てのパブリックIPv4アドレスが有料になった件について 2024/02/09の勉強会で発表されたものです。
AWSで全てのパブリックIPv4アドレスが有料になった件について 2024/02/09の勉強会で発表されたものです。AWSで全てのパブリックIPv4アドレスが有料になった件について 2024/02/09の勉強会で発表されたものです。
AWSで全てのパブリックIPv4アドレスが有料になった件について 2024/02/09の勉強会で発表されたものです。
iPride Co., Ltd.
 

More from iPride Co., Ltd. (20)

Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
SOPを理解する 2024/04/19 の勉強会で発表されたものです
SOPを理解する       2024/04/19 の勉強会で発表されたものですSOPを理解する       2024/04/19 の勉強会で発表されたものです
SOPを理解する 2024/04/19 の勉強会で発表されたものです
 
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
新人研修のまとめ       2024/04/12の勉強会で発表されたものです。新人研修のまとめ       2024/04/12の勉強会で発表されたものです。
新人研修のまとめ 2024/04/12の勉強会で発表されたものです。
 
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
Amazon SES を勉強してみる その12024/04/12の勉強会で発表されたものです。
 
AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。
AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。
AWS_Bedrock入門 このスライドは2024/03/08の勉強会で発表されたものです。
 
AWS Lambdaと AWS API Gatewayを使ったREST API作り
AWS Lambdaと AWS API Gatewayを使ったREST API作りAWS Lambdaと AWS API Gatewayを使ったREST API作り
AWS Lambdaと AWS API Gatewayを使ったREST API作り
 
AWS (Amazon Web Services) を勉強してみる その3 2024/03/01の勉強会で発表されたものです。
AWS (Amazon Web Services) を勉強してみる その3 2024/03/01の勉強会で発表されたものです。AWS (Amazon Web Services) を勉強してみる その3 2024/03/01の勉強会で発表されたものです。
AWS (Amazon Web Services) を勉強してみる その3 2024/03/01の勉強会で発表されたものです。
 
AWS (Amazon Web Services) を勉強してみる おさらい 2024/02/16の勉強会で発表されたものです。
AWS (Amazon Web Services) を勉強してみる おさらい 2024/02/16の勉強会で発表されたものです。AWS (Amazon Web Services) を勉強してみる おさらい 2024/02/16の勉強会で発表されたものです。
AWS (Amazon Web Services) を勉強してみる おさらい 2024/02/16の勉強会で発表されたものです。
 
可用性・セキュリティを考慮して AWSでDrupalを構築する 2024/02/09の勉強会で発表されたものです。
可用性・セキュリティを考慮して AWSでDrupalを構築する 2024/02/09の勉強会で発表されたものです。可用性・セキュリティを考慮して AWSでDrupalを構築する 2024/02/09の勉強会で発表されたものです。
可用性・セキュリティを考慮して AWSでDrupalを構築する 2024/02/09の勉強会で発表されたものです。
 
AWSで全てのパブリックIPv4アドレスが有料になった件について 2024/02/09の勉強会で発表されたものです。
AWSで全てのパブリックIPv4アドレスが有料になった件について 2024/02/09の勉強会で発表されたものです。AWSで全てのパブリックIPv4アドレスが有料になった件について 2024/02/09の勉強会で発表されたものです。
AWSで全てのパブリックIPv4アドレスが有料になった件について 2024/02/09の勉強会で発表されたものです。
 
AWS CDKを使おうとしたら普通に悪戦苦闘した話 2024/02/02の勉強会で発表されたものです。
AWS CDKを使おうとしたら普通に悪戦苦闘した話 2024/02/02の勉強会で発表されたものです。AWS CDKを使おうとしたら普通に悪戦苦闘した話 2024/02/02の勉強会で発表されたものです。
AWS CDKを使おうとしたら普通に悪戦苦闘した話 2024/02/02の勉強会で発表されたものです。
 
AWS (Amazon Web Services) を勉強してみる 2024/01/26の勉強会で発表されたものです
AWS (Amazon Web Services) を勉強してみる 2024/01/26の勉強会で発表されたものですAWS (Amazon Web Services) を勉強してみる 2024/01/26の勉強会で発表されたものです
AWS (Amazon Web Services) を勉強してみる 2024/01/26の勉強会で発表されたものです
 
AWS SAM入門 2024/01/26の勉強会で発表されたものです【アイ・プライド】
AWS SAM入門  2024/01/26の勉強会で発表されたものです【アイ・プライド】AWS SAM入門  2024/01/26の勉強会で発表されたものです【アイ・プライド】
AWS SAM入門 2024/01/26の勉強会で発表されたものです【アイ・プライド】
 
Drupalでフォームの代わりにSPA (React) を表示させる話 2023/12/15の勉強会で発表されたものです。
Drupalでフォームの代わりにSPA (React) を表示させる話 2023/12/15の勉強会で発表されたものです。Drupalでフォームの代わりにSPA (React) を表示させる話 2023/12/15の勉強会で発表されたものです。
Drupalでフォームの代わりにSPA (React) を表示させる話 2023/12/15の勉強会で発表されたものです。
 
ChatGPTを用いてCDKを勉強
ChatGPTを用いてCDKを勉強ChatGPTを用いてCDKを勉強
ChatGPTを用いてCDKを勉強
 
OpenID Connectについて
OpenID ConnectについてOpenID Connectについて
OpenID Connectについて
 
画像生成AIの問題点
画像生成AIの問題点画像生成AIの問題点
画像生成AIの問題点
 
AI入門
AI入門AI入門
AI入門
 

Drupal8 DBに保存して読み込む

  • 2. 目次 1. カスタムモジュールの基礎を作る → Hello World 2. フォーム画面を作る → DBへ保存する機能を作る 3. 表の表示画面を作る → DBから読み込む機能を作る
  • 7. カスタムモジュールの基礎を作る ~コントローラファイル作成~ vim src/Controller/AnimalbookController.php <?php namespace DrupalanimalbookController; use DrupalCoreControllerControllerBase; class AnimalbookController extends ControllerBase { public function content() { return array( '#markup' => '' . t('Hello!') . '', ); } } HTMLで Hello! を出力する class名は ファイル名と同じ Drupal8のControllerBaseを継 承 class名は ファイル名と同じ
  • 8. カスタムモジュールの基礎を作る ~ルーティングファイル作成~ vim animalbook.routing.yml animalbook: path: '/animalbook' defaults: _title: 'Animalbook Page' _controller: 'DrupalanimalbookControllerAnimalbookController::content' requirements: _permission: 'access content' このpathにアクセスしたとき このcontrollerを呼び出す 「access content」という デフォルトのロール
  • 13. フォーム画面を作る 〜vim src/Form/InputForm.php〜 • 完成図 vim src/Form/InputForm.php <?php namespace DrupalanimalbookForm; use DrupalCoreFormFormBase; use DrupalCoreFormFormStateInterface; use DrupalCoreDatabaseDatabase; class InputForm extends FormBase { public function getFormId() { return 'default_form'; } public function buildForm(array $form, FormStateInterface $form_state) { $typelist = array( $typelist = array( 'MAMMALS' => t('哺乳類'), 'BIRDS' => t('鳥類'), 'REPTILES' => t('爬虫類'), 'AMPHIBIANS' => t('両生類'), 'FISH' => t('魚類'), ); public function validateForm(array &$form, FormStateInterface $form_state) { parent::validateForm($form, $form_state); } public function submitForm(array &$form, FormStateInterface $form_state) { // Display result. foreach ($form_state->getValues() as $key => $value) { drupal_set_message($key . ': ' . $value); } // Save to Database. $conn = Database::getConnection(); $conn->insert('module_animalbook_data')->fields( array( 'name' => $form_state->getValue('name'), 'type' => $form_state->getValue('type'), ) )->execute(); } } $form['name'] = array( '#type' => 'textfield', '#title' => $this->t('Name'), '#required' => TRUE, ); $form['type1'] = array( '#type' => 'select', '#title' => 'タイプ', '#options' => $typelist, '#required' => TRUE, ); $form['submit'] = [ '#type' => 'submit', '#value' => $this->t('Save'), ]; return $form; }
  • 14. フォーム画面を作る 〜vim src/Form/InputForm.php〜 • 完成図 vim src/Form/InputForm.php <?php namespace DrupalanimalbookForm; use DrupalCoreFormFormBase; use DrupalCoreFormFormStateInterface; use DrupalCoreDatabaseDatabase; class InputForm extends FormBase { public function getFormId() { return 'default_form'; } public function buildForm(array $form, FormStateInterface $form_state) { $typelist = array( $typelist = array( 'MAMMALS' => t('哺乳類'), 'BIRDS' => t('鳥類'), 'REPTILES' => t('爬虫類'), 'AMPHIBIANS' => t('両生類'), 'FISH' => t('魚類'), ); public function validateForm(array &$form, FormStateInterface $form_state) { parent::validateForm($form, $form_state); } public function submitForm(array &$form, FormStateInterface $form_state) { // Display result. foreach ($form_state->getValues() as $key => $value) { drupal_set_message($key . ': ' . $value); } // Save to Database. $conn = Database::getConnection(); $conn->insert('module_animalbook_data')->fields( array( 'name' => $form_state->getValue('name'), 'type' => $form_state->getValue('type'), ) )->execute(); } } $form['name'] = array( '#type' => 'textfield', '#title' => $this->t('Name'), '#required' => TRUE, ); $form['type1'] = array( '#type' => 'select', '#title' => 'タイプ', '#options' => $typelist, '#required' => TRUE, ); $form['submit'] = [ '#type' => 'submit', '#value' => $this->t('Save'), ]; return $form; } // Save to Database. $conn = Database::getConnection(); $conn->insert('module_animalbook_data')->fields( array( 'name' => $form_state->getValue('name'), 'type' => $form_state->getValue('type'), ) )->execute();
  • 15. フォーム画面を作る 〜vim src/Form/InputForm.php〜 • 完成図 vim src/Form/InputForm.php <?php namespace DrupalanimalbookForm; use DrupalCoreFormFormBase; use DrupalCoreFormFormStateInterface; use DrupalCoreDatabaseDatabase; class InputForm extends FormBase { public function getFormId() { return 'default_form'; } public function buildForm(array $form, FormStateInterface $form_state) { $typelist = array( $typelist = array( 'MAMMALS' => t('哺乳類'), 'BIRDS' => t('鳥類'), 'REPTILES' => t('爬虫類'), 'AMPHIBIANS' => t('両生類'), 'FISH' => t('魚類'), ); public function validateForm(array &$form, FormStateInterface $form_state) { parent::validateForm($form, $form_state); } public function submitForm(array &$form, FormStateInterface $form_state) { // Display result. foreach ($form_state->getValues() as $key => $value) { drupal_set_message($key . ': ' . $value); } // Save to Database. $conn = Database::getConnection(); $conn->insert('module_animalbook_data')->fields( array( 'name' => $form_state->getValue('name'), 'type' => $form_state->getValue('type'), ) )->execute(); } } $form['name'] = array( '#type' => 'textfield', '#title' => $this->t('Name'), '#required' => TRUE, ); $form['type1'] = array( '#type' => 'select', '#title' => 'タイプ', '#options' => $typelist, '#required' => TRUE, ); $form['submit'] = [ '#type' => 'submit', '#value' => $this->t('Save'), ]; return $form; } // Save to Database. $conn = Database::getConnection(); $conn->insert('module_animalbook_data')->fields( array( 'name' => $form_state->getValue('name'), 'type' => $form_state->getValue('type'), ) )->execute(); DBに接続
  • 16. フォーム画面を作る 〜vim src/Form/InputForm.php〜 • 完成図 vim src/Form/InputForm.php <?php namespace DrupalanimalbookForm; use DrupalCoreFormFormBase; use DrupalCoreFormFormStateInterface; use DrupalCoreDatabaseDatabase; class InputForm extends FormBase { public function getFormId() { return 'default_form'; } public function buildForm(array $form, FormStateInterface $form_state) { $typelist = array( $typelist = array( 'MAMMALS' => t('哺乳類'), 'BIRDS' => t('鳥類'), 'REPTILES' => t('爬虫類'), 'AMPHIBIANS' => t('両生類'), 'FISH' => t('魚類'), ); public function validateForm(array &$form, FormStateInterface $form_state) { parent::validateForm($form, $form_state); } public function submitForm(array &$form, FormStateInterface $form_state) { // Display result. foreach ($form_state->getValues() as $key => $value) { drupal_set_message($key . ': ' . $value); } // Save to Database. $conn = Database::getConnection(); $conn->insert('module_animalbook_data')->fields( array( 'name' => $form_state->getValue('name'), 'type' => $form_state->getValue('type'), ) )->execute(); } } $form['name'] = array( '#type' => 'textfield', '#title' => $this->t('Name'), '#required' => TRUE, ); $form['type1'] = array( '#type' => 'select', '#title' => 'タイプ', '#options' => $typelist, '#required' => TRUE, ); $form['submit'] = [ '#type' => 'submit', '#value' => $this->t('Save'), ]; return $form; } // Save to Database. $conn = Database::getConnection(); $conn->insert('module_animalbook_data')->fields( array( 'name' => $form_state->getValue('name'), 'type' => $form_state->getValue('type'), ) )->execute(); nameとtypeのフィールドの値を insert:挿入
  • 17. フォーム画面を作る 〜vim src/Form/InputForm.php〜 • 完成図 vim src/Form/InputForm.php <?php namespace DrupalanimalbookForm; use DrupalCoreFormFormBase; use DrupalCoreFormFormStateInterface; use DrupalCoreDatabaseDatabase; class InputForm extends FormBase { public function getFormId() { return 'default_form'; } public function buildForm(array $form, FormStateInterface $form_state) { $typelist = array( $typelist = array( 'MAMMALS' => t('哺乳類'), 'BIRDS' => t('鳥類'), 'REPTILES' => t('爬虫類'), 'AMPHIBIANS' => t('両生類'), 'FISH' => t('魚類'), ); public function validateForm(array &$form, FormStateInterface $form_state) { parent::validateForm($form, $form_state); } public function submitForm(array &$form, FormStateInterface $form_state) { // Display result. foreach ($form_state->getValues() as $key => $value) { drupal_set_message($key . ': ' . $value); } // Save to Database. $conn = Database::getConnection(); $conn->insert('module_animalbook_data')->fields( array( 'name' => $form_state->getValue('name'), 'type' => $form_state->getValue('type'), ) )->execute(); } } $form['name'] = array( '#type' => 'textfield', '#title' => $this->t('Name'), '#required' => TRUE, ); $form['type1'] = array( '#type' => 'select', '#title' => 'タイプ', '#options' => $typelist, '#required' => TRUE, ); $form['submit'] = [ '#type' => 'submit', '#value' => $this->t('Save'), ]; return $form; } // Save to Database. $conn = Database::getConnection(); $conn->insert('module_animalbook_data')->fields( array( 'name' => $form_state->getValue('name'), 'type' => $form_state->getValue('type'), ) )->execute(); 実行
  • 18. フォーム画面を作る ~ルーティングファイル編集~ • 追記する vim animalbook.routing.yml animalbook.default_form: path: '/animalbook/form/input' defaults: _form: 'DrupalanimalbookFormInputForm' _title: 'InputForm' requirements: _access: 'TRUE' このpathにアクセスしたとき このFormを呼び出す 誰でもアクセス可、ログイン不要
  • 19. フォーム画面を作る ~DBのテーブル定義作成~ vim animalbook.install <?php function animalbook_schema() { $schema['module_animalbook_data'] = [ 'description' => 'Module Animalbook data.', 'fields' => array( 'id' => array( 'description' => 'id', 'type' => 'serial', 'not null' => TRUE, ), 'name' => array( 'description' => 'Character Name', 'type' => 'varchar', 'length' => 256, 'not null' => TRUE, ), 'type' => array( 'description' => 'Type', 'type' => 'varchar', 'length' => 256, 'not null' => TRUE, ), ), 'primary key' => array('id'), ]; return $schema; } DBのテーブル名
  • 28. • 完成図 表の表示画面を作る ~表を表示するForm作成~ vim src/Form/ListForm.php <?php namespace DrupalanimalbookForm; use DrupalCoreFormFormBase; use DrupalCoreFormFormStateInterface; use DrupalCoreDatabaseDatabase; class ListForm extends FormBase { function __construct() { } public function getFormId() { return 'default_form'; } // Initialize an empty array $output = array(); // Next, loop through the $results array foreach ($results as $result) { $output[$result->id] = [ 'id' => $result->id, 'name' => $result->name, 'type' => $result->type, ]; } $form['table'] = [ '#type' => 'tableselect', '#header' => $header, '#options' => $output, '#empty' => t('No users found'), ]; return $form; } public function buildForm(array $form, FormStateInterface $form_state) { //データベースからデータを取得する $conn = Database::getConnection(); $query = $conn ->select('module_animalbook_data', 'x') ->fields('x', array('id', 'name', 'type')); $data = $query->execute(); //条件に合致するものを配列にして返す #$result = $data->fetchCol(); $results = $data->fetchAll(); //var_dump($results); //ヘッダー作成 $header = [ 'id' => t('ID'), 'name' => t('Name'), 'type' => t('Type'), ];
  • 29. • 完成図 <?php namespace DrupalanimalbookForm; use DrupalCoreFormFormBase; use DrupalCoreFormFormStateInterface; use DrupalCoreDatabaseDatabase; class ListForm extends FormBase { function __construct() { } public function getFormId() { return 'default_form'; } // Initialize an empty array $output = array(); // Next, loop through the $results array foreach ($results as $result) { $output[$result->id] = [ 'id' => $result->id, 'name' => $result->name, 'type' => $result->type, ]; } $form['table'] = [ '#type' => 'tableselect', '#header' => $header, '#options' => $output, '#empty' => t('No users found'), ]; return $form; } public function buildForm(array $form, FormStateInterface $form_state) { //データベースからデータを取得する $conn = Database::getConnection(); $query = $conn ->select('module_animalbook_data', 'x') ->fields('x', array('id', 'name', 'type')); $data = $query->execute(); //条件に合致するものを配列にして返す #$result = $data->fetchCol(); $results = $data->fetchAll(); //var_dump($results); //ヘッダー作成 $header = [ 'id' => t('ID'), 'name' => t('Name'), 'type' => t('Type'), ]; 表の表示画面を作る ~表を表示するForm作成~ vim src/Form/ListForm.php //データベースからデータを取得する $conn = Database::getConnection(); $query = $conn ->select('module_animalbook_data', 'x') ->fields('x', array('id', 'name', 'type')); $data = $query->execute();
  • 30. • 完成図 <?php namespace DrupalanimalbookForm; use DrupalCoreFormFormBase; use DrupalCoreFormFormStateInterface; use DrupalCoreDatabaseDatabase; class ListForm extends FormBase { function __construct() { } public function getFormId() { return 'default_form'; } // Initialize an empty array $output = array(); // Next, loop through the $results array foreach ($results as $result) { $output[$result->id] = [ 'id' => $result->id, 'name' => $result->name, 'type' => $result->type, ]; } $form['table'] = [ '#type' => 'tableselect', '#header' => $header, '#options' => $output, '#empty' => t('No users found'), ]; return $form; } public function buildForm(array $form, FormStateInterface $form_state) { //データベースからデータを取得する $conn = Database::getConnection(); $query = $conn ->select('module_animalbook_data', 'x') ->fields('x', array('id', 'name', 'type')); $data = $query->execute(); //条件に合致するものを配列にして返す #$result = $data->fetchCol(); $results = $data->fetchAll(); //var_dump($results); //ヘッダー作成 $header = [ 'id' => t('ID'), 'name' => t('Name'), 'type' => t('Type'), ]; 表の表示画面を作る ~表を表示するForm作成~ vim src/Form/ListForm.php //データベースからデータを取得する $conn = Database::getConnection(); $query = $conn ->select('module_animalbook_data', 'x') ->fields('x', array('id', 'name', 'type')); $data = $query->execute(); DBに接続
  • 31. • 完成図 <?php namespace DrupalanimalbookForm; use DrupalCoreFormFormBase; use DrupalCoreFormFormStateInterface; use DrupalCoreDatabaseDatabase; class ListForm extends FormBase { function __construct() { } public function getFormId() { return 'default_form'; } // Initialize an empty array $output = array(); // Next, loop through the $results array foreach ($results as $result) { $output[$result->id] = [ 'id' => $result->id, 'name' => $result->name, 'type' => $result->type, ]; } $form['table'] = [ '#type' => 'tableselect', '#header' => $header, '#options' => $output, '#empty' => t('No users found'), ]; return $form; } public function buildForm(array $form, FormStateInterface $form_state) { //データベースからデータを取得する $conn = Database::getConnection(); $query = $conn ->select('module_animalbook_data', 'x') ->fields('x', array('id', 'name', 'type')); $data = $query->execute(); //条件に合致するものを配列にして返す #$result = $data->fetchCol(); $results = $data->fetchAll(); //var_dump($results); //ヘッダー作成 $header = [ 'id' => t('ID'), 'name' => t('Name'), 'type' => t('Type'), ]; 表の表示画面を作る ~表を表示するForm作成~ vim src/Form/ListForm.php //データベースからデータを取得する $conn = Database::getConnection(); $query = $conn ->select('module_animalbook_data', 'x') ->fields('x', array('id', 'name', 'type')); $data = $query->execute(); SQLのクエリを作成 select:検索
  • 32. • 完成図 <?php namespace DrupalanimalbookForm; use DrupalCoreFormFormBase; use DrupalCoreFormFormStateInterface; use DrupalCoreDatabaseDatabase; class ListForm extends FormBase { function __construct() { } public function getFormId() { return 'default_form'; } // Initialize an empty array $output = array(); // Next, loop through the $results array foreach ($results as $result) { $output[$result->id] = [ 'id' => $result->id, 'name' => $result->name, 'type' => $result->type, ]; } $form['table'] = [ '#type' => 'tableselect', '#header' => $header, '#options' => $output, '#empty' => t('No users found'), ]; return $form; } public function buildForm(array $form, FormStateInterface $form_state) { //データベースからデータを取得する $conn = Database::getConnection(); $query = $conn ->select('module_animalbook_data', 'x') ->fields('x', array('id', 'name', 'type')); $data = $query->execute(); //条件に合致するものを配列にして返す #$result = $data->fetchCol(); $results = $data->fetchAll(); //var_dump($results); //ヘッダー作成 $header = [ 'id' => t('ID'), 'name' => t('Name'), 'type' => t('Type'), ]; 表の表示画面を作る ~表を表示するForm作成~ vim src/Form/ListForm.php //データベースからデータを取得する $conn = Database::getConnection(); $query = $conn ->select('module_animalbook_data', 'x') ->fields('x', array('id', 'name', 'type')); $data = $query->execute(); DBへの問い合わせを実行
  • 33. 表の表示画面を作る ~ルーティングファイル編集~ • 追記する vim animalbook.routing.yml animalbook.list_form: path: '/animalbook/form/list' defaults: _form: 'DrupalanimalbookFormListForm' _title: 'ListForm' requirements: _access: 'TRUE' このpathにアクセスしたとき このFormを呼び出す 誰でもアクセス可、ログイン不要
  • 38. 疑問・課題 • ルーティングファイルの「_access」で指定する 「access contents」と「TRUE」はどう違う? • ViewのPHPソースには無駄がありそう ソースをもっと理解して、リファクタリング