Docker利用したFuelPHP開発環境の初期設定とscaffoldを利用してCRUDスケルトン作成

More than 3 years have passed since last update.


はじめに

「優しいIT」という理念の基、ITコンサルタントをしている亀井亮介と申します!

現在、仕事では要求分析・要件定義を中心に上流工程をしていますが、プログラムも書きます!

今回は、FuelPHPのscaffoldを利用してコードを自動生成します。自動生成をすることで、コードを平準化(誰が書いても同じソース)にして、コードの品質向上に寄与します!


●目的

Dockerで作成した開発環境のFuelPHP初期設定をします(Dockerはほとんど関係ありません)。

scaffoldを利用してCRUDスケルトン作成


●環境

Max OS X El Capitan

Docker 1.9.1

PHP Version 5.6.18

FuelPHP Version 1.7.3

MySQL 5.7.11


●詳細

phpMyAdminなどでデータベースとユーザを作成します。



データベース名 : database_name

ユーザ名 : username

パスワード : password


●データベース連携(開発環境)

開発環境なのでdevelopmentに記載します(developmentの他には本番環境のproduction、検証環境のstaging、テストのtestがあります)。

ファイル


APPPATH/config/development/db.php

return array(

'default' => array(
'connection' => array(
//-- Dockerを利用する場合hostは"192.168.99.100"
//-- dbnameに作成したデータベース名を記載
'dsn' => 'mysql:host=192.168.99.100;dbname=database_name',
//-- MySQLに設定したユーザ名を記載
'username' => 'username',
//-- MySQLに設定したパスワードを記載
'password' => 'password',
),
),
);


●設定ファイル(config.php)変更

変更点は下記の通りです。下記を怠るとエラーになります。

1. タイムゾーンコメントアウト

2. always_loadとORMのコメントアウトを外す


APPPATH/config/config.php

// 1. タイムゾーンコメントアウト

// 97行目あたり
'default_timezone' => 'Asia/Tokyo',
// 2. always_loadとORMのコメントアウトを外す
初期は下記のようにコメントアウトされています
// 259行目あたり
// 'always_load' => array(
/* 略 */
// 'packages' => array(
// //'orm',
//),
/* 略 */
//)
コメントアウトを外します
'always_load' => array(
/* 略 */
'packages' => array(
'orm',
),
/* 略 */
)


●scaffoldを利用してCRUDスケルトン作成

scaffoldを利用してスケルトンを作成します。個別にコントローラーやビューのスケルトンを作成できますが、ルーティングとか面倒なので、scaffoldを利用してカスタマイズという手法をとります。

サンプル:ユーザIDと文字列型で50文字のpostという名前のコンポーネント

(注記:実行結果はAPPPATHのところをセキュリティ上の配慮で加工しています。ご了承ください。)


scaffold

$ oil g scaffold -f post title:varchar[50] body:text user_id:int

Creating migration: APPPATH/migrations/002_create_posts.php
Creating model: APPPATH/classes/model/post.php
Creating controller: APPPATH/classes/controller/post.php
Creating view: APPPATH/views/post/index.php
Creating view: APPPATH/views/post/view.php
Creating view: APPPATH/views/post/create.php
Creating view: APPPATH/views/post/edit.php
Creating view: APPPATH/views/post/_form.php

これでスケルトンが作成されました。

スケルトンで作成されたモデルを基にマイグレーション(データベースに構造を反映)します。


migrate

$ oil refine migrate

Performed migrations for app:default:
001_create_posts

※注記 FuelPHPの仕様上、マイグレーションしたテーブル名は複数形になります。

例:"post"の場合のテーブル名は"posts"となり、モデルやコントローラーのファイル名などは"post"


http://192.168.99.100/post にアクセス

Crypto key errorと怒られる場合はキーを作成します。

FuelPHP Crypto key error


●APPPATH/config/crypt.phpを作成

画面に表示している下記をそのままコピーし、新規作成したcrypt.phpにペーストし保存します。


APPPATH/config/crypt.phpを作成

<?php

/**
* Part of the Fuel framework.
*
* @package Fuel
* @version 1.7
* @author Fuel Development Team
* @license MIT License
* @copyright 2010 - 2015 Fuel Development Team
* @link http://fuelphp.com
*/

return array (
'crypto_key' => '秘密', // 半角英数字記号の文字列
'crypto_iv' => '秘密', // 半角英数字記号の文字列
'crypto_hmac' => '秘密', // 半角英数字記号の文字列
);



http://192.168.99.100/post にアクセス

FuelPHP scaffold

スケルトンが作成されたようです。Add new Postをクリックして、新規登録画面に遷移して、値を入力して登録します。

FuelPHP scaffold 新規登録

Saveをクリックすると、保存されます。

FuelPHP scaffold 新規登録成功


●カスタマイズ

M モデル

V ビュー

C コントローラー

ができるので、これらをカスタマイズして開発を進ます。

各ファイルパス

"post"という名前でscaffoldした場合は下記パスに各ファイルが生成されるのでお好きなように

FuelPHP scaffold 各ファイル

モデル : APPPATH/classes/model/post.php

コントローラー : APPPATH/classes/controller/post.php

ビュー 新規登録 : APPPATH/views/post/create.php

ビュー 編集 : APPPATH/views/post/edit.php

ビュー 詳細表示 : APPPATH/views/post/view.php

ビュー 一覧表示 : APPPATH/views/post/index.php

ビュー 登録/編集共通フォーム : APPPATH/views/post/_form.php


おすすめ本

リーダブルコード

レガシーコード改善ガイド

プログラマのためのDocker教科書 インフラの基礎知識&コードによる環境構築の自動化 Kindle版


サイトマップ(未投稿あり)


理念・価値・ビジョン・使命


テスト駆動開発を重点においた規則

コーディング規則「優しいコードを書こう」(FuelPHP)

命名規則「3ヶ月後の自分自身に優しく、チームに優しく、まだ見ぬメンバーに優しく」


Docker+PythonでWebアプリケーション開発

Docker上のCentOSにPython3と、関連ライブラリpip, virtualenvとフレームワークDjango, bottle, Flaskのインストール!これらをまとめたDockerfile付き!


開発しやすい環境構築(Docker+PHP)

Dockerを利用しApacheにPHP環境 + Eclipseを連携

Dockerを利用したFuelPHP開発環境構築

Docker利用したFuelPHP開発環境の初期設定とscaffoldを利用してCRUDスケルトン作成

FuelPHPのデータベースマイグレーション


Raspberry Pi 3 (ラズパイ)とpythonで遊ぼう

Raspberry Pi 3インストール→無線LAN→日本語入出力→Macから操作

Raspberry Pi 3でプログラミングをする Node-REDと普通にプログラミング

Raspberry Pi 3でpythonを使いLEDを光らせる(Hello World)

Raspberry Pi 3でスイッチの状態を検出する

Raspberry Pi 3でpythonを使いサーボモータを動かす