x. おまけ

・期末課題のはまりどころ

テーブルの設計ミス → 修正作業が大変困難になります。 担当者にチェックしてもらいましょう。

テーブル名の修正 → alter table new_name rename to old_name の SQLコマンドで修正します。 phpMyAdminのメニューには修正機能はありません。

命名規則 → コントローラー と テーブル名 は 複数形。 モデルは単数形。 テーブルの名前は _ 形式。 モデルはキャメルケース。 例) モデル TList は テーブル t_list に対応。

テーブル名 → すべて小文字です。キャメルケースは _ 表記に変換します。bookmarks_users テーブルの様な多対多を記録するjoinテーブルの場合は、アルファベット順にテーブル名(複数形)を並べて _ でつなぎます。

テーブル名やフィールド名は単語1つで付ける。どうしても2個以上の単語で名前をつける際は、スネークケース ( _ で単語をつなぐ)

クラス名 → 大文字から始まります。キャメルケース。

http://www.cpa-lab.com/tech2/inflects/ CakePHP 規約ワードメーカー WordMaker for CakePHP Conventions などで単語の表記を確認しましょう。(cakePHP1.20の古い仕様です。)

参考) CakePHPのテーブル名「単語の複数形」について http://qiita.com/SiriusArc7/items/72da4ec221211d0b8334

特殊な複数形 → 割と正確な記述が必要

例) Money と Monies 。 es と s の差、 Month は Months ですが、 Monthes と誤ると、モデル名 Monthe をcakePHPが使用しようとして、バグります。

予約語は使用しない → 例) List → これは PHP の予約語。

Web画面のカスタマイズ

Template/Layout/default.ctp にテンプレートがあるので編集する。

bake しなおす場合、実習室の環境では生成されるPHPファイルが上書きされない不具合が発生する。bake で生成したファイルを削除してから bake しなおす。

bake で失敗する場合、テーブル名が規約に従っていない、テーブルにidフィールドがない、エディタでbakeする対象のファイルを開いたまま、などを確認してみよう。

テーブルを修正して、bake しなおしても MVC の PHP コードに変化がない場合、キャッシュをクリアして、再度 bake してみる。

bin/cake.php cache clear_all

bake で失敗する場合、cakephpをインストールしたフォルダのコピーに失敗している場合がある。レポートフォルダから元ファイルコピーしなおして解決する。

bake で失敗する場合、キャッシュやtmp フォルダの bake 以下のファイルを削除する

例)

bin\cake cache clear_all

bin\cake orm_cache clear_all

cd tmp\bake; del *.*

bake で失敗する場合、phpMyAdminのテーブルのリレーションの設定に不要な設定が残っている場合がある。

※重要※ デザイナ画面でリレーションを削除しても、テーブルの設定に不要なリンク設定が残る場合がある。テーブルの構造から、リレーション のメニューに移動して不要なリレーションを削除する。

テーブル名の修正

PHPMyAdminでは、フィールド名の修正は画面から操作できるが、テーブル名やデータベース名の修正はできない。

設定ミス(日本語で名前をつけた、や、入力ミス)で、名前を修正するには、SQLのコマンドで修正する必要がある。

例) テーブル名の変更

ALTER TABLE `変更前テーブル名` RENAME TO 変更後テーブル名

例) データベース名の変更

http://itmemo.net-luck.com/mysql-database-change/

データベース名の変更は、PHPMyAdminからは、prefixをつけるなど、バックアップ目的の名前変更にしか対応していない。

そこで↑のリンクにあるように、データベースをエクスポートし、別の名前の空のデータベースを作成した後、インポートすることで対応する。

テーブルの主キーにauto_incrementが設定されていない場合

http://blog.doli.jp/blog/2012/post509/ 参照

ALTER TABLE rentals CHANGE id id int AUTO_INCREMENT;

CakePHPの画面のカスタマイズ(cakePHP2 の当時の資料)

■ データ入力で、” id ” で入力する項目を、” 名前 ” で入力できるようにする。

scaffoldでは、他のテーブルにある id の入力には、そのテーブルの name や title フィールドの値が表示名として使用される。

name や title フィールドがテーブルに無い場合は、

cakePHPの モデルに以下の行を追加

public $displayField = 'custom_name';

↑で'custom_name' の部分を修正する。 idの参照元の他のテーブルのフィールドの中から選んで指定する。

■ データ入力の見出しを修正するには、

例) ビューの、add.ctp のデータ入力フォームで、 published の入力の見出しを、 Vol と表示する例。

echo $this->Form->input('published',array('label' => 'Vol'));

■ ctp カスタムテンプレートの入力フォームで、別の表から入力候補を選んで、プルダウンで利用するには、

http://book.cakephp.org/2.0/ja/core-libraries/helpers/form.html

belongsTo や hasOne 関係を使うケースで select 項目を生成したい場合、

Users コントローラーのadd メソッドに

↓を1行追加(User モデルが Group モデルに belongsTo の構造で):

$this->set('groups', $this->User->Group->find('list'));

その後フォームビューに以下を追加します:

echo $this->Form->input('group_id');

■ 日付・時刻入力で、現在時刻を設定しておくには、

http://www.84kure.com/blog/2015/05/29/cakephp-form%E3%83%98%E3%83%AB%E3%83%91%E3%83%BC%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E6%97%A5%E6%99%82%E3%82%92%E5%85%A5%E5%8A%9B%E3%81%99%E3%82%8B/

例) ビューの add.ctp の該当行(↓では data の inputフォーム)に、以下の様に追記する。

echo $this->Form->input('date',

array(

'type' => 'datetime',

'label' => 'Date',

'dateFormat' => 'YMDHi',

'monthNames' => false,

'minYear' => date('Y')-1,

'maxYear' => date('Y')+1,

'timeFormat' => '24',

'default' => date('Y-m-d H:i')

));

Xamppの、PHPの時刻設定が 日本時間になっていないので修正する。

http://mawatari.jp/archives/time-adjustment-of-xampp-php

D:¥xampp¥php¥php.ini を編集する。
date.timezone = Europe/Berlin

date.timezone = Asia/Tokyo

■レビューのレートを数値表記から 星の個数に修正する。

ここでは、文字 * を複数個並べて表示する例を示す。ほかの記号や、画像に置き換えるなど工夫するとよい。

評価を表示しているビュー index.ctp に、次のようなPHPのコードで、評価が数値で表示されている場合、

<td><?php echo h($assessment['Assessment']['rate']); ?>&nbsp;</td>

配列で表示するデータを埋め込んでおいて、評価値を配列のインデックスとして利用するように修正。

<td><?php

$stars = array("","*","**","***","****","*****");

echo h($stars[ $assessment['Assessment']['rate'] ]);

?>&nbsp;</td>