『CakePHP』を使ってみる 〜5〜 バージョン 1.2 ベータを導入

リファレンスの付録である『Cake ブログチュートリアル』をやってみることに。

バージョン 1.2 ベータを導入

現在の Stable のバージョンは 1.1.19.6305。
1.2ベータの方は 1.2.0.6311。

Ethna』を使い始めた時は、安定版の 2.1 系を選んでいたら2.3系が正式リリースされて使い勝手が全く変わってしまったということがあった。
そういうのはちょっとイヤなので、最近はだいたい新しい方を選んでみることにしている。
導入に関しては特に問題なし。モデルとかコントローラは公開ディレクトリ外に置くようにした。

1.2 はフォーム周りの仕様が変わっていた

『A.10. データバリデーション』のページのコードを入力してページにアクセスしたら警告メッセージが出た。

Notice (1024): Method input() is deprecated in HtmlHelper: see FormHelper::input or FormHelper::text [CORE/cake/libs/view/helpers/html.php, line 735]
Notice (1024): Method textarea() is deprecated in HtmlHelper: see FormHelper::input or FormHelper::textarea [CORE/cake/libs/view/helpers/html.php, line 659]
Warning (512): Method HtmlHelper::submit does not exist [CORE/cake/libs/view/helper.php, line 148]

調べてみると 1.2 からは HTMLヘルパーで form 周りを作るのは推奨されないらしい。
代わりに FORM ヘルパーというものが用意されているとのこと。

[1.1系] A.8. /app/views/posts/add.thtml

<form method="post" action="<?php echo $html->url('/posts/add')?>">
   <p>
       タイトル:
       <?php echo $html->input('Post/title', array('size' => '40'))?>
       <?php echo $html->tagErrorMsg('Post/title', 'タイトルは必ず入力してください。') ?>
   </p>
   <p>
       本文:
       <?php echo $html->textarea('Post/body', array('rows'=>'10')) ?>
       <?php echo $html->tagErrorMsg('Post/body', '本文は必ず入力してください。') ?>
   </p>
   <p>
       <?php echo $html->submit('保存') ?>
   </p>
</form>

↓1.2系だとこうなる。

[1.2系] A.8. /app/views/posts/add.thtml

<?php echo $form->create("Post", array("action" => "add" ))?>
<p>タイトル:
<?php echo $form->input('Post/title',array(
						'error' => array(
							'required' => 'タイトルは必ず入力してください。'
						),
						'size' => 40)) ?>
</p>
<p>本文:
<?php echo $form->input('Post/body', array(
						'error' => array(
							'required' => '本文は必ず入力してください。'
						),
						'rows' => 10,
						'type' => 'textarea'))?>
</p>
<?php echo $form->end("保存")?>

[1.1系] A.9. /app/models/post.php

<?php
class Post extends AppModel
{
	var $name = 'Post';
	var $validate = array(
		'title' => VALID_NOT_EMPTY,
		'body' => VALID_NOT_EMPTY
	);
}
?>

[1.2系] A.9. /app/models/post.php

<?php
class Post extends AppModel
{
	var $name = "Post";
	var $validate = array(
					'title' => array('required' => VALID_NOT_EMPTY),
					'body' => array('required' => VALID_NOT_EMPTY),
					);
}
?>

1.2 からは model で条件を書きやすくなっているみたい。
Ethna』もこんなカンジだったなあ。

以下のページでまとめられていたのでメモ。参考になります。

なんかコードがずれてるなあ…