CakePHPで各々のModelにアソシエーションを設定してて、 検索で使いたくないときはunbindModelを使うとはずせる。 Modelに定義してないけど、今回だけアソシエーションにしたい場合はbindModelで設定できる。 それは知っていたんだけど、unbindModelとbindModelを使用して、paginateを使用したら検索がうまくいかなかった。 $this->Model->unbindModel(array('hasOne'=>array('Model_2'))); $this->Model->bindModel(array('hasOne'=>array('Model_3'))); $result = $this->paginate('Model'); paginateはcountのSQLを実行した後、中身を取るSQLを実行してくれるんだけど、 ログを見たらcoun
CakePHPのModelに悩む人が多いようなので、自分なりの付き合い方(考え方)をご紹介します。 CakePHP Advent Calendar 2010の3日目です。 前日の k1LoW さんのエントリ、参考になりますね。GETのフォームをdata[]でやるとURLがすんごいことになるので、ウチでは別途対応できるライブラリを作ったりしてます。 さて、3日目の今日は書きたいネタは幾つかあったのですが、「君の当たり前に僕らは感嘆させられるんだ」の精神に従って、自分なりのModelの使い方、考え方を書いてみます。 1. 適正なインターフェイスを用意して処理をカプセル化 まず基本的な考え方。 Model(に限らずですが)では、処理単位でインターフェイス(メソッド)を用意して、実装はカプセル化しておきます。 こうすることによって、Modelを利用する側(Controllerや他のModel等)は
最新情報!!!! 新しく修正した記事書きました!!! cakePHP+JQueryでajaxを使ってFormの内容をPOSTしてみた。その3(修正版) cakePHP使っているんでAjaxだろうがpostしたときは$this->dataで受け取りたいなーとか思ってました。 data[Post][title]とかいうformの名前にしておけばいいといえばいいけど、Securityコンポーネントつかっているとだめだよねって話になりますよね。 んで、いちいち全部のinputタグのIDからデータとってくるのとかめんどいなーと悩んだ訳ですが・・・ よく考えたら、formのデータを全部もってくればいいってことに気づきました。 ってことでこんな感じに書いてみました。 <?php $this->Html->scriptStart(array('inline' => false))?> $(function
CakePHP にはデバッグで便利な pr() って関数があります。 出力の前後に pre タグ を付けてくれる print_r() のラッパーです。当然Web用。 シェルにも欲しいです。てなわけで作りました。
Model hasAndBelongsToMany(HABTM)はpostに設定します。 models > post.php class Post extends AppModel { public $name = 'Post'; public $hasAndBelongsToMany = array( 'Tag' => array( 'className' => 'Tag', 'joinTable' => 'posts_tags', 'foreignKey' => 'post_id', 'associationForeignKey' => 'tag_id', 'fields' => array('id','name'), 'unique' => true ), ); } models > tag.php class Tag extends AppModel { public $name
cakePHPでSessionを利用するときは $this->Session->write(); $this->Session->read(); を使いますが、今回セッションが消えるという問題がおこった。 現在のバージョンは1.1.18。 最初、CAKE_ADMINを利用した管理画面の時のみ、セッションが消える現象がおこったのでその関係かなと思っていました。でも、実際はCAKE_ADMINは関係なかった。 原因はCSSでした。 →「cakePHPで変なアクセスがある!?」 で紹介されていたのですが、 画像、CSSなどで実際に存在しないパス&URLを指定していると、サーバにHTTPアクセスを行う!! その結果(内容は上記サイト参照)、セッションが消されていたということのようで・・・。 実際に、管理画面用のCSSには、存在しない画像へのパスが書かれていて、それを消したらセッションが消えなくなり
織田信長 ぼちぼち、元気にやっています。少し薬にも慣れた...んかなぁ。相変わらず食べられないけど。朝、指がこわばって文字なんて入力できなかったけど、それはほぼなくなった。関節もどこも痛くない。薬効いてきたんやろな。 で、ブログを書こうと言う気がまた起きてきた。 …
Qdmailは本当に便利かつ強力なメール送信ライブラリだと思います。まず、作者にお礼を申し上げます。 さて、実際にQdmailを使う時にどうしてもReturn-Pathを設定したい時があります。 本家にもRetrun-Pathの設定方法が掲載されていますが http://hal456.net/qdmail/return_path これだけ見ても結局、関数型のqd_send_mailを使ってください ということになります。 せっかくCakephp対応のQdmailComponentがあるのに、使わないのはもったいないですね。 でも、QdmailComponentを下記のように使うと $this->Qdmail->to( 'to@example.com' , '配信先日本語名' ); $this->Qdmail->subject('タイトル'); $this->Qdmail->from('fr
せん茶SNSはタイムラインを重視した社内向けSNSです。 ビジネスにおいてもやはり根底にあるのは人と人のつながりです。そしてそれをオンライン上で再現するのがSNSになります。社内向けにSNSを導入されたい企業はせん茶SNSを使ってみるのはいかがでしょう。 ログイン画面です。 メイン画面です。昔のTwitterっぽい感じでしょうか。 アクションやグループなどでタイムラインを絞り込めます。 こちらはグループ関連の情報。 プロフィール。 ユーザ一覧。 グループ一覧。 グループ内の発言を一覧できます。 コメントは階層表示になります。 ファイル管理です。 メッセージ機能があります。 せん茶SNSはタイムライン形式をベースとしています。そしてファイルアップロードやグループ、メッセージ、ウォッチリストといった機能があります。ユーザ同士のプライベートメッセージもあるので社内メール代わりにもなりそうです。
Controllerをまたいで共通のviewを使いたいなぁってな事があって少し調べてみたことのメモです。 Controller内で $this->render(view名); って書いた場合のview名は、各Modelに対応するview用ディレクトリ内にviewファイルが存在する事を前提としていますので、これでは巧くいきません。 Modelに関係なく任意のviewファイルを指定したい場合は、render関数の第三引数を使うとokです。 $this->render(null, null, VIEWS.'hoge'.DS.'hoge.thtml') こんな感じでフルパスを指定してやります。必要に応じて第2引数のlayout指定をしてあげても良いでしょう。ちなみに、VIEWSはapp/viewsディレクトリのこと。その他、パスのdefineは cake/config/paths.php に一覧が
みんなの短歌 Hinetterという短歌を投稿できるサイトを作ってみました。ここのところよく解説していたHerokuのPHPスタックの上にCakePHP2.1とJQuery Mobileを載せて開発しています。アイデアを思いついてからは24時間くらい、実質の開発時間は半日ほどで特にFacebook連携と見た目の部分に時間をかけた感じです。Herokuによる開発速度はとんでもない月曜の朝にFacebookのウォールになんとなく短歌を投稿したのですが、その後なんとなく話しが盛り上がり名前の案が出た所でheroku createしています。当日の夜は何もせず、翌日下北沢オープンソースカフェで作業を始めました。環境の構築などが必要なく、ただひたすらにGitでpushするだけでいいのでお昼すぎには動くアプリをデプロイする事ができました。また副産物としてCakePHP2をHerokuで動かす為のプラグ
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' =>
クロコスのエンジニアでもあり、日本Symfonyユーザー会のメンバーでもある小川さん([twitter:@fivestr])が執筆した最新作「効率的なWebアプリケーションの作り方 -PHPによるモダン開発入門-」を献本いただいたので紹介したいと思います。 最新の技術を追っているわけではなく、実績ある技術や手法の基礎編 サブタイトルに「モダン」という言葉があってPHPでの最先端な開発かと感じる方がいるかもしれませんが、内容はOOP、DI、そしてドメイン駆動開発などの基礎的なところを実例を通して紹介しています。つまり、これから5年後または10年後と利用することができる実績ある技術と手法について紹介していることが特徴だと感じました。*1 Webアプリケーションをプロとして開発するために必要な知識を理解するための一歩 PHPの書籍というと、PHPの構文などPHPの使い方にフォーカスした本、または
独自にSMTPサーバを用意していない状況下でCakePHPでメール配信プログラムを実装しようと思っています。で、GmailのSMTPサーバを使おうとしたんですが、ハマったのでメモしておきます。 コンポーネント QdmailとQdsmtpのコンポーネントをダウンロードして、app/controllers/components/に配置します。 ダウンロードdownload - Qdmail - PHP::Mail Library , Quick and Detailed for Multibyte ダウンロード - Qdsmtp-Simple SMTP Mailer for PHP コントローラ メール送信処理は、複数のコントローラで呼び出す可能性があるので、AppControllerクラスにメール用のパラメータを設定しておきます。 app/app_controller.php <?php c
CakePHP で SSL 接続を必須にするには以前書いた、Security コンポーネントを使う方法があります。 CakePHP1.2 Security コンポーネントを使用して SSL でのみアクセスを許可する しかし、単純に SSL 接続を必須にしたい場合は、Baker にある SSL コンポーネントを使うのが簡単です。 Component for forcing a secure connection (Articles) | The Bakery, Everything CakePHP 特定のアクションだけ SSL にしたい場合はそのアクションのメソッドに以下のように書きます。 class MyController extends AppController { var $components = array('Ssl'); function index() { $this->S
何か変なqueryをMySQLに投げてしまって 2012-05-26 18:23:21 Error: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`test`.`user_logs`, CONSTRAINT `user_logs_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`)) みたいな感じでPDOExceptionが発生した場合に、どんなSQLを実行したのかがわからなくて困ったので調べた。 debugモードであればqueriesLogに保存されてそれを覗けばわかるのだけど、本番だとqueriesLogには保存されないのでそれだと
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く