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

More than 1 year has 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を使いサーボモータを動かす