CakePHP

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]

Cakephp サクラ レンタールサーバーの500エラー

サクラのレンタルサーバーにシステムを導入した所500エラーが出ました。

原因
1、RewriteBaseの記述をしなくてはならない。
  これは下記サイトで解決できます。
  http://ohhappy.jp/sakuravps/1244.html

2、フォルダ権限を変更しなくてはならない。
  index.phpとそのフォルダ権限に書き込み権限がるとエラーになってしまうようです。
  関係フォルダに755を指定。

CakePHP 1.3 Model find conditions 追加

CakePHP1.3にてModelのfind(‘list’)に強制的にconditionsを追加したい場合の処理のメモ。

 0
      );
    }
    return $queryData;
  }
?>

若干無理やりすぎかもですね。

CakePHP 1.2 admin.routing みたいなものを追加する

CakePHP 1.2 admin.routing みたいなものを追加するメモです。

システムを作成していたらadmin以外に必要になったので書いておきます。

今回は「account」を追加します。

/app/config/routes.phpにこんなのを追加します

 'account', 'profiles' => true));
?>

これで、viewはaccount_名前で作成して認識することができます。

ですが、ここで問題ガッ!!!!!!!????????
リンクにプレフィックスが追加されへんやん

リンクの配列に

link(__('編集', true), array('plugin' => 'account', 'controller' => 'accounts', 'action'=>'edit', $account['Account']['id'])); ?>

このようにpluginを追加したら解決しました。
はたしてあっているのだろうか。
今のところは問題なく動いております。

CakePHP1.2 携帯 端末ID(UID)取得時 Docomoのセッションがきれる

CakePHP1.2にて携帯端末ID(UID)を取得するときにDocomoのセッションがきれちゃうんです!!
これはちょっとこまりましたね。。。

問題は、uidが来るとuseragentが変わってしまうためはじかれてしまうみたい

/cake/libs/session.php

read('Config')) {
			if ((Configure::read('Session.checkAgent') === false || $this->_userAgent == $this->read('Config.userAgent')) && $this->time <= $this->read('Config.time')) {
				if ($this->error === false) {
					$this->valid = true;
				}
			} else {
				$this->valid = false;
				$this->__setError(1, 'Session Highjacking Attempted !!!');
			}
		}
		return $this->valid;
	}
?>

ここのuserAgent見てるところではじかれてしまうみたいなんです

なのでMobileとPCの切り替えをしている部分で(これ自分でつくったとこなんでみなさんのやり方でどうぞ)


エージェントチェックきっちゃいましたww
大丈夫なのだろうか。。。。