第 2 回勉強会  2008/3/16 (日)
CakePHP で開発する時に 統一しておきたいコーディング内容
コーディング内容を統一すると・・・
他人のソースでも解読しやすくなり、 開発効率もアップ
これから紹介する内容は、 あくまで提案です。 みんなでより良い方法を 模索できれば良いかな。
DocumentRoot  について if (!defined('ROOT')) { define('ROOT', ‘path/to/cakephp/'); } if (!defined('APP_DIR')) { define('APP_DIR', 'app'); } DocumentRoot  内に  app/webroot/  以下を移動させます。 移動させた  DocumentRoot  内の  index.php  の先頭に下記を追加します。 参考:「 CakePHP ガイドブック  P.299 15-1-3 」 フォルダ名はそれぞれ下記の通りとします。 DocumentRoot => public_html   /   CakePHP => cakephp
URL の最後にスラッシュを付けよう [app/app_controller.php] class AppController extends Controller { function beforeFilter() { if (isset($this->params['url']['url'])) { $uri = $this->params['url']['url']; if (substr($uri, -1) != '/') { $this->redirect($uri . '/', 301); exit; } }     } } 参考: (D×D) CakePHP で URI の形式を統一する http://dxd8.com/archives/4/
Smarty  について Smarty  は使わない
title  タグ・  meta  タグを各コントローラで指定しよう [app/controllers/tests_controller.php] class TestsController extends AppController { function index() { //  ページタイトル $this->pageTitle = ‘ 勉強会ブログ’ ; //  メタタグキーワード $keywords = ‘CakePHP,php,JavaScript’; $this->set(‘keywords’, $keywords); //  メタタグ概要 $description = ‘SE 勉強会を一緒にやりませんか??’ ; $this->set('description', $description);     } } title  タグ・  meta  タグを直接ビューに書く場合を除き、 各コントローラ(アクション)で指定できるようにしよう。
title  タグ・  meta  タグを各コントローラで指定しよう(続き) [app/app_controller.php] class AppController extends Controller { function beforeFilter() { //  ページタイトル(デフォルト) $this->pageTitle = ‘ 勉強会ブログ’ ; //  メタタグキーワード(デフォルト) $keywords = ‘CakePHP,php,JavaScript’; $this->set(‘keywords’, $keywords); // メタタグ概要(デフォルト) $description = ‘SE 勉強会を一緒にやりませんか??’ ; $this->set('description', $description);     } } 各コントローラ(アクション)の指定方法は前のページの通り。 全てのページで書くのは面倒なので、デフォルト値を設定しておこう。
title  タグ・  meta  タグを各コントローラで指定しよう(続き 2 ) <title><?php echo $title_for_layout; ?></title> <meta name=&quot;keywords&quot; content=&quot;<?php echo $keywords; ?>&quot; /> <meta name=&quot;description&quot; content=&quot;<?php echo $description; ?>&quot; /> ビューの書き方は下記の通り。
バリデーション(テキスト) if (empty($user_name)) { $this->invalidate('user_name'); $validate_flg = 1; } elseif (mb_strlen($user_name) > 100) { $this->invalidate(‘user_name_mojisuu'); $validate_flg = 1; }
バリデーション(メールアドレス) if (empty($mail)) { } elseif (mb_strlen($mail) > 500) { $this->invalidate('mail_mojisuu'); $validate_flg = 1; } elseif (!preg_match('/\\A(?:^([a-z0-9][a-z0-9_\\-\\.\\+]*)@([a-z0-9][a-z0-9\\.\\-]{0,63}\\.(com|org|net|biz|info|name|net|pro|aero|coop|museum|[a-z]{2,4}))$)\\z/i', $mail)) { $this->invalidate('mail_pattern'); $validate_flg = 1; } else { $mail_array = explode('@', $mail); if (!checkdnsrr($mail_array[1], 'MX') && !checkdnsrr($mail_array[1], 'A')) { $this->invalidate('mail_pattern'); $validate_flg = 1; } }
バリデーション( URL ) if (empty($url)) { } elseif (mb_strlen($url) > 2000) { $this->invalidate('url_mojisuu'); $validate_flg = 1; } elseif (!preg_match('/^https?:\/\/[-_.!~*\'\(\)a-zA-Z0-9;\/?:\@&=+\$,%#]+$/', $url)) { $this->invalidate('url_pattern'); $validate_flg = 1; }
バリデーション(郵便番号) if (empty($zip)) { } elseif (!preg_match('/^[0-9]{7}$/', $zip)) { $this->invalidate('zip_pattern'); $validate_flg = 1; }
バリデーション( TEL ) if (empty($tel)) { $this->invalidate('tel'); $validate_flg = 1; } elseif (!preg_match('/^[-0-9]{10,13}$/', $tel)) { $this->invalidate('tel_pattern'); $validate_flg = 1; }
バリデーション if ($validate_flg == 0) { return true; } else { return false; } 下記のように、バリデーションの戻り値は最後に返す。 まとめて返す事で利用者に分かりやすくするため。 (うまくまとめられないので、口頭で補足します)
コーディング( PHP の終了タグ) PHP  のみで書いたソースでは終了タグ( ?> )を書かない。 LF にしていれば問題は無いが、習慣として書かないようにする。
コーディング(字下げ) 字下げをする時に、タブは使わない。 空白の半角  4  文字を使う。
コーディング(文字列) 文字列がリテラルの場合はシングルコーテーションで囲む。 $value = ‘ 一六社’ ; 変数の展開の場合はダブルコーテーションで囲む。 $message = “{$value} へようこそ” ;
コーディング(文字列の連結) 文字列の連結はピリオドを使う。 また、コードを読みやすくするためにピリオドの前後に半角スペースを入れる。 $value = ‘ かしも’  . ‘ ソフトウェア’ ;
コーディング(条件式) If  文などの条件式で条件を指定する括弧の前に空白をひとつ入れる。 また、条件指定の括弧を閉じた後にも空白をひとつ入れる。 括弧で囲まれた条件文の中では、演算子の前後にも空白を入れる。 波括弧は  if  文の同行に記載する。 if ($value == ‘PHP’) { $message = ‘GOOD’; } else { $message = ‘BAD’; }
コーディング( class ・ function ) class  と  function  の波括弧は 改行して記載する。 class TestsController extends AppController { function index() { } }
コーディング(コメント) コードの始めにページ概要・ URL ・最終更新者名・最終更新日を記載する。 /* *  テストページ * * http://www.16g.jp/tests/ * * @modifiedby  $LastChangedBy:  あつ  $ * @lastmodified  $Date: 2008-03-16 10:00 $ */ class TestsController extends AppController { }
終わり

CakePHPで開発する時に統一しておきたいコーディング内容(080316)