2015年 12月 の投稿一覧

Cakephp 2.X 日付型の文字列変更 form date controller

CakePHPでformで入力されたdate型のデータがcontrollerでは下記のように配列できてました。
これを処理する際に配列から文字列への変更をする方法が何個かあるんですが、
元々用意されている関数を使うと下記のような処理の仕方になると思います。

単一フィールド
$this->request->data["Post"]["post_date"] = $this->Order->deconstruct("post_date",$this->request->data["Post"]["post_date"]);
一括
$this->request->data = $this->Post->create($this->request->data["Post"]);
このやり方が一番スマートな方法なのかどうかはなんともいえませんが。。。

Cakephp 2.X 文字列の変換ユーティリティ 複数形 単数形 大文字

今日はCakePHPのInflectorユーティリティのメモです。

これを使うと色々効率よく関数を書けるのでたまに使用しております。

[php]
$name = Inflector::pluralize($singular);
入力: Apple, Orange, Person, Man
出力: Apples, Oranges, People, Men
[/php]

[php]
$name = Inflector::singularize($plural)
入力: Apples, Oranges, People, Men
出力: Apple, Orange, Person, Man
[/php]

[php]
$name = Inflector::camelize($underscored)
入力: Apple_pie, some_thing, people_person
出力: ApplePie, SomeThing, PeoplePerson
[/php]

[php]
$name = Inflector::underscore($camelCase)
underscoreはキャメルケースの文字列をアンダースコア(_)に変換します。
入力: applePie, someThing
出力: apple_pie, some_thing
[/php]

[php]
$name = Inflector::humanize($underscored)
入力: apple_pie, some_thing, people_person
出力: Apple Pie, Some Thing, People Person
[/php]

[php]
$name = Inflector::tableize($camelCase)
入力: Apple, UserProfileSetting, Person
出力: apples, user_profile_settings, people
[/php]

[php]
$name = Inflector::classify($underscored)
入力: apples, user_profile_settings, people
出力: Apple, UserProfileSetting, Person
[/php]

[php]
$name = Inflector::variable($underscored)
入力: apples, user_result, people_people
出力: apples, userResult, peoplePeople
[/php]

[php]
$name = Inflector::slug($word, $replacement = ‘_’)
slugは特殊文字をラテン文字に変換したり、スペースをアンダースコアに変換します。slugはUTF-8を前提とします。
入力: apple purée
出力: apple_puree
[/php]

Cakephp 2.X Modelの論理削除の実装

自社のサイトを更新していたらブログを全然書いていないことに気付いたのでたまにはメモ書きしようと思います。

今回は、CakePHP2.X系で論理削除を実装する流れです。

何件かbehaviorがあるようですが今回はCakeDCという所のBehaviorを紹介します。

1、まずbehaviorをダウンロードして/Model/Behaviorディレクトリにいれます。(MITライセンス)
https://github.com/CakeDC/utils/blob/master/Model/Behavior/SoftDeleteBehavior.php

2、論理削除する対象のモデルに下記項目を追加する
[php]
`deleted` tinyint(1) NOT NULL DEFAULT 0,
`deleted_date` DATETIME DEFAULT NULL,
[/php]

3、/Model/AppModel.phpに下記関数を記述します。
[php]
public function exists($id = null) {
if ($this->Behaviors->attached(‘SoftDelete’)) {
return $this->existsAndNotDeleted($id);
} else {
return parent::exists($id);
}
}

public function delete($id = null, $cascade = true) {
$result = parent::delete($id, $cascade);
if ($result === false && $this->Behaviors->enabled(‘SoftDelete’)) {
return (bool)$this->field(‘deleted’, array(‘deleted’ => 1));
}
return $result;
}
[/php]

4、対象となるモデルでSoftDeleteBehaviorの呼び出し
[php]
class Post extends AppModel {
public $actsAs = array( ‘SoftDelete’ );
[/php]

5、後は自動で論理削除されます。

6、削除されたレコードも表示した場合はdetachします。
[php]
$this->Behaviors->detach(‘SoftDelete’);
$posts= $this->Post->find("all", $params);
[/php]