CakePHP2.x
CakePHPの公式サイトを確認すると、 モデル内で以下のようにかけるらしい。 begin(); if (/*すべて成功*/) { $dataSource->commit(); } else { $dataSource->rollback(); } でも今回はコントローラーでかけたい。 ということで、トランザクション管理用のモ…
フレームワークは便利なんだけど、動作が遅い。 もちろん CakePHP も例外ではない・・・。ということで、高速化Tipsをまとめてみた。1.PHP-APCで中間コードをキャッシュ これはCakePHPに限らずだけど、 結構パフォーマンスに差が出るのでやっておく。2.Form…
ちょっとしたプログラムで・・・・ find('all', array('conditions'=>array('Customer.name LIKE '=>'%'.$customer_name.'%'))); 上記の $customer_name をエスケープしようとして、 Sanitize::clean() を使ったけど、 % がエスケープされなかった。% を入力…
単なるメモです。 VIewに以下を書けばいいだけ。 element('sql_dump'); ?> ただ、使ってみると表示されるクエリ数に制限がある気がするのは気のせいか・・・。
忘れるのでメモ。favicon.ico を webroot 直下において、 以下をheaderタグ内に設置する。 html->meta('icon');
単なるメモ。 find( 'all', array( 'conditions'=>array( 'UntouchableList.product_id'=>$_product_id, 'OR'=>array('UntouchableList.item'=>$_lists) //このようにORの条件配列を入れる ) ) );
default.confに以下を追記する。 location /cakephp { alias /usr/share/nginx/html/cakephp/app/webroot; index index.php; if (!-e $request_filename) { rewrite ^(.+)$ /cakephp/index.php?q=$1 last; } } location ~ ^/cakephp/(.+\.php) { alias /usr/…
以下でOK。1.Controllerをインポートする。 App::uses('TestsController', 'Controller');2.newして使う。 $tests_controller = new TestsController(); $tests_controller->test($this->data, 'Test');まあ、コンポーネントでまとめてもいいんだけど・・・。…
CakePHPで大量のデータを扱っていたら、 以下のエラーが出た。PHP Fatal error: Allowed memory size of 268435456 bytes exhausted (tried to allocate 32 bytes) in /var/www/html/cake_dir/lib/Cake/Model/Datasource/Database/Mysql.php on line 247これ…
今まで、CakePHP の データ保存では save() しか使っていなかった。 理由は save() だけ使えば何とかなるので、 View とか Controller の機能を勉強することが多かったから。 ただ、前から saveMany() とか色々と便利なのがあるのは知っていたので、 調べて…
getLastInsertId() という便利メソッドがある。 これは Model で保存したデータの最新主キーを返してくれる。ただ、いまいち挙動が信用できない。 具体的に言うと、 getLastInsertId() は 該当モデル(テーブル)の最新主キーを返すのか、 保存したデータに…
CakePHP の View で URL を生成する場合は、 $this->html->url(array('controller'=>'', 'action'=>'')); を使う。ただ、これは Controller では使えない。 Controller では Routerクラスを使って、 以下のように生成する。 '', 'action'=>'')) 公式サイトを…
エラーページなど、他のControllerで共通で使うページがある場合の使い回しについて 今更ながら気づいた。同一ActionでViewを切り替えるときには $this->render() を使う。 今までは $this->render('error'); のように指定していた。 こうすると、Controller…
Authコンポーネントで認証したユーザー情報(名前とかユーザーID)を 画面のヘッダーに表示させたい。 全Viewで $this->set(); するのは面倒なので、 AppControllerでセットする。この場合は beforeFilter() ではセットできない。 CakePHP 1.3 の時は before…
Authコンポーネントを使うと、認証機能が簡単に実装できるが、 モデルを運営者モデルと利用者モデルで分けたいことがある。これを実現するには、AdminRouting を利用する。運営者モデルをOwnerとして、全ActionをAdminRoutingで実装する。 利用者モデルをUse…
CakePHPで入力フォームを作成する場合、 フォームをFormヘルパーで作成すると、 エラー時などに入力値を保持してくれる。例えば、ユーザー登録画面を作成する場合、 ユーザーのメールアドレスをユニークチェックすることがある。 同じメールアドレスが存在す…
ルートディレクトリをリネームしてアクセスしたら、 404エラーが発生した。原因はCakePHPのキャッシュでした。 /app/tmp/cache/ 以下の全ファイルを削除すると正常に動作します。
StoreモデルにNewsモデルが紐づく時、 Newsモデルのデータを新着順で取得したい。以下のように find() しても上手くいかない。 $this->Store->find('first', array('conditions'=>array('Store.id'=>$id), 'order'=>array('News.creation_date'=>'DESC'))); …
CakePHPでは AppController の beforeFilter() に共通処理を実装することが多い。 ただ、各Controller で beforeFilter() をオーバライドしてしまうと、 AppController の beforeFilter() が呼ばれないので、 共通処理が実行されない。なので、各Controller …
CakePHPでURLを指定するときは $this->html->url() を使うことが多い。 で、AdminRouting の時はどうするのかなと・・・ 以下のように admin を true にすればOK。 $this->html->url(array('controller'=>'tests', 'action'=>'test', 'admin'=>true)); Admin…
CakePHPでのログイン処理は Authコンポーネント を使う。 その場合、usersテーブルの「name」と「password」で認証する。ただ、usersテーブルに「名前」「ログインID」「パスワード」を持たせて、 それぞれ「name」「login_id」「password」にすると、ログイ…
管理者モードをONにすると管理者用URLが使える。 具体的には Controller/Action の前に admin が入る。【一般ユーザーのURL】 /cake_dir/Controller/action【管理者ユーザーのURL】 /cake_dir/admin/Controller/action ControllerクラスのActionには admin_ …
SplFileInfo::openFile(): failed to open stream: Permission denied in /.../public_html/lib/Cake/Cache/Engine/FileEngine.php on line 313というエラーが出た。 これはキャッシュへのアクセス権限がないために発生するエラー。一度、キャッシュを削除し…
システムで登録画面と編集画面など、 レイアウトが似ている画面を使いまわす時は コントローラーで $this->render() を使うと、 Viewを指定できる。以下のようにすると、add.ctp を edit でも使用可能になる。 public function edit{ $this->render('add'); …
外部ライブラリは /app/Vendor/ に放り込んで、 App::uses() or App::import() を使いインポートするが、 ライブラリによってインポート方法が違う。ライブラリがクラスの場合は App::uses() を使う。 ライブラリがクラスではない場合は App::import() を使…
CakePHPにはデータ削除時のリンク用に postLInk() というFormHelperが用意されている。 postLink()を使うと、POSTで削除用アクションにアクセスできて、 削除確認用のアラートも出してくれる。 とても便利。 リンクではなく、ボタンが出力される postButton(…
過去の内容が分かりづらかったので、大幅に修正しました。 過去の内容は一番最後に残しています。 シェルクラスを使うメリットとしては、 Modelが使えるところだと思う。 既存処理を使いまわせるのは便利。 ということで、CakePHPでシェルクラスを使った非同…
ちょっとした仕様変更で、 Cakeで作ったシステムをコピーする機能が必要になった。コピー自体は問題なくできたが、 オリジナルとコピーでログイン情報を共有してしまう問題が発生した。 オリジナルでログインすると、コピーでもログインできてしまう・・・。…
1.3と少し変わっていたので、メモ。 echo $form->select( 'テーブル名.列名', array('値' => '表示される項目', …), array('empty'=>false, 'value'=>'値') ); 第2引数の連想配列はoptionタグのnameとvalueになる。 これには $this->Model->find('list') で…
CakePHPには h() があって、HTMLをエスケープしてくれる。 便利だけど、実体は htmlspecialchars() なので、 htmlentities() に変更する。関数は /lib/Cake/basic.php にある。 最後の return で htmlspecialchars() を使っているので、 htmlentities() に変…