プログラム初心者のcakephp2.x・wordpress情報

プログラム初心者のcakephp2.xの技術情報・wordpressやAPI関連も覚書(PHP・mySQL)

cakePHP2.xでこの機能あるのかな?ちょっとざっと調べてみた。(日本語URL&重複チェック・削除フラグで完全削除しない&アソシエーション)

久々にcakePHP2.xねたで・・・。

緩やかに確認進んでいますが・・・一向にサイト作成まではつながっていかない・・。

 

①日本語URLが使いたい。(重複チェックついか)

wordpressとか使ってると普通に投稿のタイトルとかで、URLとして作成できるので、そのほうがいいかなと思っている。cakePHPの場合、デフォルトでIDを推奨しているようで、数字のURLになってしまう。まぁー通常の投稿とかはいいけど、カテゴリとかタグとかは日本語名にしたいなと思いちょっと修正。コレであっているかは分からないが、単純にIDでURL作ってリンクにしているところをタグなどの名前にしてみた。コレはカラム名で「name」とする。

あとは詳細を表示するコントローラーの関数側で、$idを$nameにして、「$this->MtrMemotag->findByName($name);」で値を取得する。そんな感じで実現できました。

ただ、同一名のnameがあると古いほうを優先して取ってきちゃうようなので、同一名のnameが内容にチャックしないといけない。これはmodelのバリデート機能でできる。

 

    public $validate = array(
        'name' => array(
			'required' => array(
				'rule' => 'isUnique',
				'message' => 'このタグ名はすでに使用されています。'
			)
		),);

 

 

②削除フラグで完全削除しない&アソシエーション

データを残して削除フラグを立てる機能を追加した。これは「論理削除」というらしい。コレはいろんなブログで紹介されている「SoftDeletable Behavior 」を使用する。cakePHP1.Xとは少し設定が違うので、結構はまった。DBテーブル的には対象となるテーブルに「deleted(tinyint(1) 0)とdeleted_date(datetime null)」のカラムを追加する。

 

 「SoftDeletable Behavior 」ダウンロードしてまず、ファイル名の確認「soft_deletable.php」→「SoftDeleteBehavior.php」こういう名前でないといけない。それで、app/models/behaviorsに入れます。論理削除を利用したいmodelに「$actsAs = array('SoftDeletable');」を入れる。

更にコントローラ部の通常であれば「$this->’model名’->delete($id)」で削除を実行するのであるが、このビヘイビアは「$this->’model名’->delete()」を呼ぶと「false」を返すため、「if(!$this->’model名’->delete())」でメッセージやリダイレクト先を記述すればOKになる。

 ただ問題はアソシエーションしている場合(1-多、多-多など)。論理削除した場合でも関連性は残るので、アソシエーションしているデータを出力するとデータを表示させてしまう。そのため、少々めんどくさいが、表示部分で「deleted」が「1」の場合は表示しないなどの出し分けにしてしまった。もっとスマートな方法があれば教えてください!

 

必要な機能を洗い出して、いよいよサイト制作できるかな・・・