日々の出来事、メンバーの働く様子や声、未来への想いなど、Supershipの“BE SUPER”なストーリーをシェアしています。
photoBy: http://www.mori-hosp.jp/community/img/女の子P5090150…セッションが切れる、繋がらない、始まらない原因はなに?cakephpのバグでセッションバグが一番厄介。 対策法をまとめてみる。 cakephpの場合は、明示的にsessionを始める必要がある。バージョンにもよるみたいだが、セッション自動スタートがオフになっている場合がある。 そんな場合は、bootstrap.phpに if(!isset($_SESSION)) session_start();と書く。 favicon や css js のリンク切れ<link rel="shortcut icon" href="favicon.ico" /> のパスがリンク切れだとセッションも切れる ファイルがリンク切れしていないか確かめよう IE8 などでポップアップ窓を開いたとき、別セ
ちょっと説明用も兼ねて、基本的なsql_dumpエレメントからDebugKit, DataSourceのgetLog()を使った方法まで、まとめました。 sql_dumpエレメントで確認する <?php echo $this->element('sql_dump'); ?> https://github.com/cakephp/cakephp/blob/2.3.6/app/View/Layouts/default.ctp#L60 CakePHPデフォルトのレイアウトであるdefault.ctpからは、この様にSQLダンプ用のエレメントが読み込まれてます。 既に開発が進んでるプロジェクトだったり、配布されてるレイアウトをベースにしていたりすると、sql_dumpエレメントの読み込みが削除されてるかもしれないけど、普通は一番簡単にSQLを確認出来るところです。 if (!class_exis
CakePHPでfind使うとき SELECT * FROM t WHERE "id" = '1' AND (("status" = '1') OR ("flg" = '1')); というSQLが書きたければ find('find', array( 'conditions' => array( 'id' => 1, 'OR' => array( 'status' => 1, 'flg' => 1, ), ), )); みたいな感じで書くと思います。 で、今回2個のORが使いたいなと思ったんですが、 普通に書いてしまうと find('find', array( 'conditions' => array( 'id' => 1, 'OR' => array( 'status' => 1, 'flg' => 1, ), 'OR' => array( 'status' => 2, 'flg' =>
CakePHPのモデルはfindすると関連するモデルのテーブルと勝手にJOINしまくる。デフォルトの状態で。 なのでapp_model.phpでそういうことはやめてくれとお願いする。 class AppModel extends Model { var $recursive = -1; } これですべてのモデルで意図せぬJOINはしなくなります。 そのモデルに結びついたレコードだけを持ってくるようになる。 たまにCakePHP遅すぎてつかえねーとか言ってる人もいらっしゃるようですが、ここらへん設定したらもしかしたら解消されるかも知れません。 JOINして欲しい時は明示的に、モデルのメソッドの中なら $this->recursive = 1; コントローラやテストコードのメソッドの中なら $this->ModelName->recursive = 1; やらするといいでしょう。 またはfin
CakePHP 1.3 にて、 Model::find() の条件式で NULL の扱いを考慮する必要があった。 "IS NULL" を表現したい場合 条件式: <?php $conditions = array('hoge' => null); Where句: WHERE "hoge" IS NULL "IS NOT NULL" を表現したい場合 条件式: <?php $conditions = array('NOT' => array('hoge' => null)); Where句: WHERE NOT ("hoge" IS NULL) "IS NULL" の他に別の値も OR 条件で指定したい場合 条件式: <?php $conditions = array( 'OR' => array( array('hoge' => null), array('hoge' => '1') )
This behavior lets you implement soft delete for your records in your models by introducing a flag to an existing table which indicates that a row has been deleted, instead of deleting the record. Using this behavior you can implement soft deletion in your CakePHP models so no real data is lost when you issue a delete on a specific record. Instead, a field of your choosing is used to indicate that
cake-logo CakePHPを触り始めて早1週間 なんとなく、使いやすさは分かってきたけど まだ、サクサク書けないですね。 ピュアPHPで書いてた時は その都度、書き換えていたので ルールを身に付けるまでは辛抱です。 さて、今回は論理削除を試してみました。 やはり、完全にデータを消すと 後々面倒なことがありそうですからね。 SoftDeleteBehaviorを使って論理削除してみる CakePHPのビヘイビアにSoftDeleteBehaviorというのがありまして こちらを使用して論理削除の設定をしてみました。 1.SoftDeleteBehaviorをダウンロードして設置 SoftDeleteBehavior.php CakeDCのutilsからファイルをダウンロード utils / Model / Behavior / SoftDeleteBehavior.php ダウンロー
何かというとcakeでは通常$model->delete();すると物理削除でレコードごとなくなりますが、 これがあら不思議!このビヘイビアを使うと論理削除にしてくれます。 通常のdelete()呼び出しで物理削除ではなく、deletedに1 が入り、delete_dateフィールドに日時が入る 該当するモデルは何もしなければdelete = 0 である条件を必ずつけてくれる というものです。いや幸せ。 さて準備です。GitHubのcakeDCから ここにあるSoftDeleteBehavior.phpだけをapp/Model/Behaviorにぶっこんでみます。 例としてモデルは、User.phpにしてみましょう。 私のモデルは、既にACLのビヘイビアが設定されていますが、それに追加してあげればいいですね。 public $actsAs = array( 'Acl' => array(
cakePHPにはページネーションという便利な機能が搭載されてるらしい。 それを使うと、簡単にページの分割やリンクによるソートなどができるようになるそうな。というわけで、今回はそのページネーションについてまとめる。 使い方 主にコントローラー内とビュー内で使用する。 コントローラー内での操作 基本の使い方は以下の通り。 $data = $this->paginate() ずいぶんと簡単でございますね。上記の場合、命名規約により自動的にコントローラーに対応するモデルが選ばれ、$this->Model->find('all')と同じリクエストが発行されてデータが吐き出される。 なお、デフォルトでは20件のデータが呼び出されるみたい。あと第一引数にモデル名を指定することもできる。 【下記の結果は事実上同じ】//PostalCodesController内 $result = $this->Pos
Pagination class PaginatorComponent(ComponentCollection $collection, array $settings = array()) One of the main obstacles of creating flexible and user-friendly web applications is designing an intuitive user interface. Many applications tend to grow in size and complexity quickly, and designers and programmers alike find they are unable to cope with displaying hundreds or thousands of records. R
Cakephp2でTextHelper::truncate()を動かすと、1回目の処理が文字化けしてしまいました。どういう訳か2回目以降は正常に切り取ってくれます。 /lib/Cake/View/Helper/TextHelper.phpのソースを追ってみると、mb_strlen()が正しい文字列の長さを返していません。strlen()と同じ値を返してくれます。それで後のmb_substr()で正しく切り取ってくれていませんので文字化けしているようです。 strlen()になっているということは、予想通りmb_strlen()の第4パラメータにエンコードを指定しておけばOKでした。ということは、php.iniのmbstringの項目を正しく設定していないのが原因です。そこで、 [mbstring] mbstring.language = Japanese mbstring.internal
CakePHP フォーム画面を作っているのですが、 どうしても処理を分けたい内容が出てきたので submitを2つ作って処理を分けることにしました。 submitに名前を付ける PHPでも普通にできるsubmitボタンに名前を付けて コントローラー側で名前を判断して処理をするという 仕組みを実装します。 ビューファイルでsubmitに名前を付けたものを準備 <?php echo $this->Form->create('Model'); ?> ・・・ 略 ・・・ <?php echo $this->Form->submit('確認画面へ', array('name' => 'submit')); ?> <?php echo $this->Form->submit('削除する', array('name' => 'delete')); ?> <?php echo $this->Form->e
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く