CakePHP

 mediaプラグイン応用(4) Versionファイルを表示時に作成する

デフォルトだと、ファイルのアップロード時にVersionファイルを全て作成します。これだと、 Versionファイルの容量がかさむ あとからVersionファイルの設定を追加した場合、以前からのファイルに対応できない 等があるので、VersionファイルをViewで呼び出し…

mediaプラグイン応用(3) ファイルチェック

アップロードするファイルの種類やサイズをチェックする設定を追加しました。 端的に言うと、バリデーションです。基本的にそんなに難しくないのですが、$fieldList指定を追加していたために、ちょっとハマりました・・・

mediaプラグイン応用(2) アップロードファイル名の変更

mediaプラグインでアップロードしたファイル名を、任意に変更してみました。元々のファイル名のままだと、日本語のファイル名で不正エラーになるケースがあったり、サーバ側でファイルを扱えなくなる可能性があるので、ファイル名変更は必須です。 Attachmen…

madiaプラグイン 応用(1) $fieldListチェックの設定

mediaプラグインの基本的な保存・表示周りを一通りできるようになりました。 「こんな事できないか」な課題はありますが、 多様な種類のファイルアップロードを一元的に扱えるのは魅力的。 設定などでカスタマイズできないか、検討してみます。拡張が必要な…

mediaプラグイン導入(2) 表示

mediaプラグインで、Userに関連付けてattachmentsおよびpp/webroot/media/transfer/img 以下に保管した画像の表示実装です。 前記事 mediaプラグイン導入(1) 基本的な導入 - 趣味の延長線 追記:2/17 0時頃 filterに出力される縮小画像の作成タイミングに、…

mediaプラグイン導入(1) 基本的な導入

画像など、アップロードファイルを保存・表示するプラグイン「Media Plugin for CakePHP」を導入してみました。個人的に、実際に使うには、若干機能追加が欲しい感じですが、まずは基本機能の導入から。

動的な表の出力ヘルパーtableHeaders/tableCells

HTMLヘルパーのtableHeaders, tableCellsは、配列の数だけth/tdを出力してくれる、動的に表を作る際に実に便利なヘルパーなのですが、tableHeaders第三引数オプションの$thOptionsは、全部のthに同じオプションしか指定できません。CookBookだけでは分からな…

Session.saveを独自設定する場合の注意

以前、Session.saveを独自設定を指定して、セッション有効期限などを変更する方法を紹介しましたが、この方法、セッションをDBあるいはキャッシュに設定する場合は避けた方が良さそうです。

margin-left+position:relativeでsubmitボタンを2つ並べると一方が動作しなくなるケース

CakePHPのデフォルトCSS + $formヘルパーをベースに、position:relativeを用いてsubmitボタンを2つ横並べにしたら、一方(左側)が押せなくなる現象が発生しました*1。 原因は、submitを含むdivのCSSによるものでした。 CSSの設定によっては、CakePHPに限らず…

配列をSet::で操作する

Modelから取得したデータ配列を更に検索&抽出する必要が生じましたが、array_searchなどで対応できる範疇を超えていました。これは独自に関数作らないとダメかなあ、と思いつつtwitterで arrayをSQLのようにサーチしたい。 WHERE public_flag=true AND crea…

save(), saveAll()の$fieldList設定

前日、関連モデルがある場合の$fieldListは、[テーブル名].[フィールド名]で設定と記載しましたが、むしろ間違いでした。 $fieldListの設定には、テーブル名を入れてはいけません。以下、$fieldListチェックの動作検証です。

Containerとrecursive

Containはrecursiveで取れる範囲から絞り込む Contain設定なしで取れてないモデルは、Containで指定しても取得できない recursiveの階層を増やすこと。 recursive = -1 でContainはできない

$filedList設定でフィールド追加攻撃対策

複数の関連モデルの同時登録の方法を調べていて、save()に、$fieldListという設定があることを知りました。 http://book.cakephp.org/ja/view/75/Saving-Your-Data 例えば、usersのgourp_idという項目はユーザ変更不可なのだけど、usersのedit画面にデータを…

$form->inputでラジオボタンを初期選択させる方法

$form->inputでラジオボタンを出力するときに、初期状態で値をどれか選択済にしておく方法。 $form->radioによる方法は調べれば出てきますが、$form->inputは見当たらなかったので・・・ 結果論、$form->radioとほぼ同じでした。 Thanks for 「cakephpは困っ…

ロジックはどこにまとめるべきなんだろう。

同じロジックが複数箇所にあるとメンテナンス漏れの原因になるので、1箇所にまとめるべきと思うのですが、 view, controller, modelそれぞれで共通使用するロジックの場合、どこに置くのが一番正しいのでしょう。どこに置いても、結局App:importすれば使える…

CakePHPのACL関連まとめ

CakePHP関連で、多分、特に初期で一番悩んだのが「ACL関連」 自己の「悩み履歴」「解決策メモ」のまとめです。 そして、まだまだ不満 ^^; あるので・・・今は保留ですが、 今作ってるモノの基礎できたら、検討予定です。 特にSQL負荷関連。。

関連モデル hasManyとbelongsToの違い

「特定のuserが一定期間中に作成したnotes一覧」の取得を、 Noteモデルから取得(belongsTo設定使用) と Userモデルから取得(hasMany設定) で行って比べてみました。

virtualField機能使ってみた

shin1x1さんがtwitterで「ver1.3にこんな機能がある」とtwitterで呟かれていたのをみて、実際に使ってみました。 virtualField機能で、できること*1 定形の計算や文字列処理を、取得時にSQL内で行う SQL関数を直接指定 *1:もっとあるかもしれない・・・

ver1.3.0βをセットアップしてみたら、1.2と色々違った

shin1x1さんの記事を検証したくなったので、 CakePHP1.3.0-βをセットアップ+検証環境作り*1のためにbake使用してみました。 気になった点リストアップ chiper_seedという暗号化キー関連の設定が追加になってますが、これの運用用変更時、ご注意。 ちゃんとキ…

携帯の固有IDのみで認証

Authコンポーネントによる認証は、通常はusersのusernameとpasswordの照合で行うので、この2項目の登録が必須fieldsの設定で、username => mailadressのような項目名変更は可能ですが、2項目、うち1つは暗号化した認証情報が必要">*1ですが、携帯の固有IDの…

セッション設定をコントローラ側で変更

独自のセッション設定を使う場合core.phpで指定しますが、これをコントローラ側で上書きするタイミングは、__construct()が基本。参考 http://d.hatena.ne.jp/hetima/20070201/1170313526 2010/02/09 13/30頃 追記 セッションをDBあるいはキャッシュ(memcach…

セッションの有効時間変更

CakePHPで、Security.levelをmediumにするとセッションの有効時間が自動的に7日間になるところをカスタマイズする方法の再実装。以前、app側で変える方法がわからなくてcake/libs/session.phpを改修してましたが、 方法を教えていただいたので、ようやく対応…

入力値がある場合のみvalidate

バリデーションの基本設定でつまづいた事。保存する項目に「URL」があるからurlのvalidationルールを指定したら、 設定しない場合に空送信してもエラーになる。。 notEmptyルールがわざわざあるから、これを指定しなければEmptyOKなのかなあって思ってたんで…

$html->linkでmailtoも作れる

$html->linkは、mailto:でもリンクが作れる。 第二引数に、Stringでmailto:〜 と指定するだけ。 echo $html->link("メール", "mailto:".$user['User']['mail']);↓ <a href="mailto:cake@example.com">メール</a> mailto以外がどうなるかは未検証。。

コントローラの中で別のモデルを使う

モデルの中で別のモデルを使う、という方法は既に紹介されています。 ひでぶろぐ。 containable で関連モデルを読み込ませないコントローラ側で別のモデルを使う方法も、ほぼ同様で実現できました。

controller/action指定するとInternal Server Errorになる場合の.htaccess設定

開発の関係でちょっと特殊な環境にCakePHP構築したところ、 http://cakephp-root/ にアクセスした時は問題なかったのですが、 http://cakephp-root/controller/action にアクセスすると、Internal Server Errorになりました。 これを、 app/webroot/.htacces…

Formヘルパーで出力したタグに備考を記載する

Formヘルパーのinputメソッドを使うと、labelで括られた項目名と、入力フォームが自動的に出力されますが、 そこに「 * 必須」とか「6文字以上12文字以下」のように付記を入れる方法。 $options[‘before’], $options[‘between’], $options[‘after’]のいずれ…

Sanitize::cleanした改行を元に戻す

以前の改修で、全データはDB登録前にヌルバイトなどの不正コードとSQL特殊文字のエスケープを処理する(($opsion['encode']=falseでSanitize::clean()))仕様にしていましたが、 その場合、TEXTAREAで改行を入れて登録した場合、\\\nを\nに戻す、という一手間…

モデル追加した場合のACL設定追加方法

コントローラー単位でACLを設定している場合で、モデル(コントローラ)を新たに追加した際にはACLの設定追加が必要なので、その方法のメモ。コントローラー単位でACLを設定の実装方法はこちら。

bakeで関連モデルの設定名が途切れる事がある

3文節位の長いテーブル名からbakeでモデルを生成すると、関連の生成時にクラス名が途切れました。原因など不明ですが、ひとまず現象メモ*1。 *1:CakePHPのバージョンは1.2.5