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');
■ 日付・時刻入力で、現在時刻を設定しておくには、
例) ビューの 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']);
?> </td>
配列で表示するデータを埋め込んでおいて、評価値を配列のインデックスとして利用するように修正。
<td><?php
$stars = array("","*","**","***","****","*****");
echo h($stars[ $assessment['Assessment']['rate'] ]);
?> </td>