【CakePHP 2.10.18】bakeで作成するフォームのラベルをMySQLの日本語コメントにする

CakePHP 2.10.18

bakeで作成したフォームは、標準ではラベル名がカラム名(英語表記)です。カラム数が多いテーブルだと修正に手間がかかるため、 MySQLのコメントに入力した日本語をラベルに利用する場合の方法を紹介します。

変更前
変更後

テーブル

CREATE TABLE `posts` (
  `id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'レコード主キー',
  `title` varchar(255) DEFAULT NULL COMMENT 'タイトル',
  `body` text COMMENT '本文',
  `created` datetime DEFAULT NULL COMMENT 'レコード作成日時',
  `modified` datetime DEFAULT NULL COMMENT 'レコード更新日時',
  PRIMARY KEY (`id`),
  UNIQUE KEY `id` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ModelTask.phpを修正

app/vendors/cakephp/cakephp/lib/Cake/Console/Command/Task/ModelTask.php

public function bake($name, $data = array()) {
		if ($name instanceof Model) {
			if (!$data) {
				$data = array();
				$data['associations'] = $this->doAssociations($name);
				$data['validate'] = $this->doValidation($name);
				$data['actsAs'] = $this->doActsAs($name);
			}
			$data['primaryKey'] = $name->primaryKey;
			$data['useTable'] = $name->table;
       $data['comment'] = $name->schema();//★追加する
			$data['useDbConfig'] = $name->useDbConfig;
			$data['name'] = $name = $name->name;
		} else {
			$data['name'] = $name;
		}

--*以下省略*--

bakeテンプレートを修正

app/vendors/cakephp/cakephp/lib/Cake/Console/Templates/default/views/form.ctp

//★変数追加
$field_comment = (isset($schema[$field]['comment'])) ? $schema[$field]['comment']:$field;
$this->Form->input('{$field}', array(
          'label' => '{$field_comment}'//★ラベルにコメントを指定
));

bake実行

$ php ./app/Console/cake.php bake -app “/var/www/html/***/app” all