【PHP】フレームワーク CakePHP 6ホール目【v1.2】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
2009/03/09(月) 10:55:37ID:3PTy4GqZ※sage推奨
※日本語マニュアルURLを貼るときは、http://book.cakephp.org/ja/view/1/ のようにしましょう(末尾のエンコードされたタイトル部分は不要)
■本家
http://www.cakephp.org/
APIドキュメント
http://api.cakephp.org/
the Bakery
http://bakery.cakephp.org/
CheatSheet (PDF)
http://cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf
■日本語公式
http://cakephp.jp/
フォーラム
http://cakephp.jp/modules/newbb/
cookbook(マニュアル)
http://book.cakephp.org/ja
0478nobodyさん
2009/06/10(水) 13:01:47ID:???テキストフィールドに文字列を入力してエンターを押しても候補が表示されず、
1文字削除すると、候補が表示されます。
どうすれば直るのでしょうか?
0479478
2009/06/10(水) 13:28:23ID:???何か対処法はないでしょうか・・・
0480nobodyさん
2009/06/10(水) 14:28:19ID:???レスありがとうございます。
呼び出し方として
モデル->ビヘイビア
ではなく
コントローラ->{モデル,ビヘイビア}
ということでしょうか?
おんなじ処理(たとえばPV集計など)を書くのにコンポーネントだとMVC的に間違っている気がするのですが
0481nobodyさん
2009/06/10(水) 14:29:41ID:???core.php内で設定する以外でお願いします。
0483482
2009/06/10(水) 15:39:30ID:???0484nobodyさん
2009/06/10(水) 15:44:47ID:???まだいまいち状況がつかめていないが。
共通の処理というのが特定のモデルを使うようなものであれば、
そのモデルを各コントローラーから呼んであげればよい
モデルを使わないのであれば、各コントローラーで処理する
各コントローラーの処理を共通化するのは>>476-477
0485nobodyさん
2009/06/10(水) 16:28:13ID:???どういう場面で使えばいいのかわかんなくて、一度も使ってないんだけど
0486nobodyさん
2009/06/10(水) 20:31:17ID:???必要無いものを無理に使う必要はないと思う。
0487nobodyさん
2009/06/10(水) 21:59:36ID:???0488nobodyさん
2009/06/10(水) 22:43:22ID:???わけわからん
全然スイーツじゃねぇし
0489nobodyさん
2009/06/10(水) 23:06:08ID:???しかし、もう我慢できない!
スイーツな名前だけどスイーツには使いこなせませんっ!
異論は認める
0490nobodyさん
2009/06/10(水) 23:07:35ID:???マニュアル主義的なところあるし
0491nobodyさん
2009/06/11(木) 01:11:50ID:???手を出さないのが無難とはわかりつつも、わざわざグローバル関数として
用意されているのだから、便利な使い方があるに違いないと邪推してしまう
>>487
e()って何だよと思って調べたらecho()か
だいたいechoは()でくくらないで使う方が普通だと思うし
それを考えると、逆に使いづらくなってるような
俺が使うのはhと、デバッグ時にprくらい
気分でenvとか使っちゃうことがあるけど、
自分でも何で使ってるのかわからない
0492nobodyさん
2009/06/11(木) 01:36:39ID:???いっそのこと逆にsystem.out.print()とか作れよw
0493nobodyさん
2009/06/11(木) 02:49:59ID:???0494nobodyさん
2009/06/11(木) 13:27:45ID:???e(h())ってなるのがいやなので、eh()ってのを作って使うとより便利だけどね。
0495nobodyさん
2009/06/11(木) 13:50:01ID:???0496nobodyさん
2009/06/11(木) 14:49:44ID:???基本的に勝手にエスケープされるのでほとんど使わない
そういやCakeだとLIKのワイルドカードの%と_がエスケープされないけど
これは自分でエスケープしなきゃいけないのかね
フレームワークでは意図的に入れたワイルドカードか不意にポストされた
ワイルドカードか判断できないってことなのかな
0498nobodyさん
2009/06/11(木) 15:42:25ID:???0501nobodyさん
2009/06/11(木) 21:09:45ID:???0502nobodyさん
2009/06/12(金) 00:59:17ID:???んー、検索フォームで%をポストされると、そのままワイルドカードに
なっちゃうんだよね
hoge%fugaで検索すると%hoge%fuga%にマッチするのを探しちゃう
本当なら%hoge\%fuga%になってほしいところなんだけど
まあ、そこまで問題ではないのかもしれないけど、意図しない動作なので気になる
0505nobodyさん
2009/06/12(金) 06:51:54ID:???function afterLayout(){
$view =& ClassRegistry::getObject('view');
$view->output = mb_convert_encoding($view->output, 'SJIS');
}
らしい。ttp://blog.ecworks.jp/archives/506
0506nobodyさん
2009/06/12(金) 09:56:19ID:???%は、エスケープされないみたいだね。
シングルクオート、ダブルクオートはエスケープされてるから、仕様っぽいな
0507nobodyさん
2009/06/12(金) 10:18:18ID:???function wildcard($text ,$escape = true ,$left = true ,$right = true ,$wc = '%') {
return (empty($left) ? '' : $wc) . (str_replace($wc ,'\' . $wc ,$text)) . (empty($right) ? '' : $wc);
}
0508nobodyさん
2009/06/12(金) 12:57:59ID:???%ほげほげ
って入力されたら、インデックスがあたらなくてサーバを簡単にあぼんできるってこと?
0509nobodyさん
2009/06/12(金) 13:44:17ID:???ユーザーからの入力値を受け付けて、なおかつワイルドカードで始まらない
like文っていうのはあまり想像できないけどな。
0510nobodyさん
2009/06/12(金) 16:10:41ID:???0511nobodyさん
2009/06/12(金) 19:58:24ID:???どこで出ているのか、特定できなくて困っています。
コントローラの最後にechoを入れるとゴミデータの前、
VIEWの最初に文字を入れるとゴミデータの後に
表示されるので、コントローラとViewの間で表示されていそうなんですが
どこがあやしいかわかりますか?
これをしてみれば?みたいなことがあれば教えてください。
0512nobodyさん
2009/06/12(金) 20:30:44ID:???0513511
2009/06/12(金) 21:14:17ID:???文字コードが誤って判定されていました。
http_outputを設定することで解決しました。
httpだと問題なく動作していたんですが、httpsにしたとたん
問題が発生しました。
SSLでは文字コードの判定が違うんでしょうか。
>>512
ゴミデータは?でした。
0514nobodyさん
2009/06/14(日) 05:26:58ID:???e(); は echo の略だから 1文字しか短くならない。
だから使わないんだよね。
0515nobodyさん
2009/06/14(日) 17:49:59ID:???0517nobodyさん
2009/06/15(月) 05:54:41ID:???これも
ttp://pc11.2ch.net/test/read.cgi/hosting/1236253865/
0518nobodyさん
2009/06/15(月) 20:19:10ID:???この質問って回答するの難しい?
0519nobodyさん
2009/06/15(月) 21:55:12ID:???0520nobodyさん
2009/06/16(火) 01:02:44ID:???0521nobodyさん
2009/06/16(火) 22:49:42ID:???CakePHP1.2ガイドブック
6/27発売 キタ━━━━━━(゚∀゚)━━━━━━ !!
0522nobodyさん
2009/06/16(火) 22:58:46ID:???0523nobodyさん
2009/06/16(火) 23:00:25ID:???0524nobodyさん
2009/06/17(水) 12:27:40ID:???最近のCakePHPではPostgreSQLでまともに動きますか?
それと、バグは収束傾向でしょうか?
0526nobodyさん
2009/06/17(水) 17:52:25ID:???こんなもんなのかと思える
ただのPHPと違ってユーザー数は一桁違うだろうからね
0527nobodyさん
2009/06/18(木) 12:52:15ID:???Componentでsmartyをつかいたいのですが、
<?php
class Mail_sendComponent{
//メール内容生成------------------------
var $smarty;
var $tmp_path;
var $url;
function make_mailbody($tmp_path,$url){
App::import('Vendor','smarty/Smarty.class');
//合成
$this->smarty->assign("url",$url);
$out = $this->smarty->fetch ($tmp_path);
return $out;
}
}
?>
エラー内容
Fatal error: Call to a member function assign() on a non-object in /パス/mail_send.php on line 18
どしたらいいのでしょうか・・・・
0528nobodyさん
2009/06/18(木) 12:58:09ID:???0529527
2009/06/18(木) 13:09:19ID:???そもそものコピペの流用なのですが、
vendor("smarty/Smarty.class");
↓
App::import('Vendor','smarty/Smarty.class');
に変えただけなのですが・・・・
$this->smarty =new Smarty();
とか、そういう方向でしょうか・・・?
0530カナディアンマン
2009/06/18(木) 16:07:17ID:???出力されたHTMLで、 data[User][job] の後の括弧の中身が空欄なのですが、これは正常ですか?
チェックボックスにチェックをしてFormを送信しても値が取れないんです。
出力されたHTML
<input type="checkbox" name="data[User][job][]" value="1" id="UserJob1" /><label>ヒキ</label>
<input type="checkbox" name="data[User][job][]" value="2" id="UserJob2" /><label>ニート</label>
<input type="checkbox" name="data[User][job][]" value="3" id="UserJob3" /><label>フリーター</label>
VIEWの記述
echo $form->input('job', array('label' => '仕事', 'type' => 'select', 'multiple' => 'checkbox', 'options' => $jobs));
コントローラーの記述
$jobs = $this->User->Job->find('list');
$this->set(compact('jobs'));
0532カナディアンマン
2009/06/18(木) 17:00:36ID:???data[User][job]の中身がNULLでした。
0533カナディアンマン
2009/06/18(木) 17:09:12ID:???僕の質問の仕方がわかりづらいと思うので、少し変えます。
>>530のHTMLでチェックボックスをONにして送信しても、empty(data[User][job]) がTRUEになります。
チェックボックスがONになっているという情報はどのように取得できるのでしょうか?
0535nobodyさん
2009/06/18(木) 17:42:48ID:???0536534
2009/06/18(木) 18:08:35ID:???$this->data
ね
debugをオンにしてないってオチじゃないよね?
0537nobodyさん
2009/06/18(木) 18:57:33ID:???debug( $this->data );
を、controllerに記述して中身を確認しましょう。
そしたらあとはカラムの型に応じて適当に処理すべし
0538nobodyさん
2009/06/18(木) 20:08:09ID:???そのほとんどはデザイナ会社が勘違い(or 背伸び)で取ってきた案件が多いな。
だから>>521のような本が伸びるんだろう。
0539カナディアンマン
2009/06/18(木) 23:28:34ID:???debug( $this->data ); をしました。
結果
Array
(
[User] => Array
(
[hoge] => 1
[job] =>
[hogehoge] =>aaa
)
)
やっぱりjobの中に何も入ってないです。
0541nobodyさん
2009/06/19(金) 00:05:29ID:???HABTMなら
http://book.cakephp.org/view/85/Saving-Related-Model-Data-HABTM
$form->input('Job.Job');
ってまだHABTMやったことないけど
0542カナディアンマン
2009/06/19(金) 00:39:16ID:???var $belongsTo = array(
'Job' => array(
'className' => 'Job',
'foreignKey' => 'job_id',
'conditions' => '',
'fields' => '',
'order' => ''
)
);
HABTMではありません。
あと、申しわけないのですが、VIEWの記述は>>530のヤツには少し間違いがありました。正しくはこれです。
出力されたHTML
<input type="checkbox" name="data[User][job][]" value="1" id="UserJob1" /><label>ヒキ</label>
<input type="checkbox" name="data[User][job][]" value="2" id="UserJob2" /><label>ニート</label>
<input type="checkbox" name="data[User][job][]" value="3" id="UserJob3" /><label>フリーター</label>
VIEWの記述 (※inputの後は'job_id'でした)
echo $form->input('job_id', array('label' => '仕事', 'type' => 'select', 'multiple' => 'checkbox', 'options' => $jobs));
コントローラーの記述
$jobs = $this->User->Job->find('list');
$this->set(compact('jobs'));
0543カナディアンマン
2009/06/19(金) 00:48:30ID:???VIEWの記述
echo $form->input('job_id_hoge', array('label' => '仕事', 'type' => 'select', 'multiple' => 'checkbox', 'options' => $jobs));
「$form->input(」の後ろを「job_id_hoge」にしたらうまくいきました。
Userテーブルに存在する列と同じ名前だとうまくいかないみたい?
何でかわかりませんが・・・。
0544nobodyさん
2009/06/19(金) 07:52:35ID:???なんだjob_idなのか。
habtmじゃないとしたらUser.job_idにはint型ひとつしか入らないでしょ。
だからUser.job_idは複数選択できちゃだめ。
で、field にないデータが欲しいときは、架空のフィールド(例User.jobs)を作ってあげるイメージ
そしたら、multiple checkbox でも何でもできるから、$this->data['User']['jobs']に所望のデータが入るってこと。
データが消えたのは重複するjob_idが存在したか、もしくはモデルのデータを参照したとかかな?
0545nobodyさん
2009/06/20(土) 02:06:37ID:???<?php
class TitlesController extends AppController {
var $name = 'Titles';
var $scaffold;
}
?>
としたところ、
viewアクションで
Undefined variable: title
が発生してしまいました。
いろいろ調べたところ、
$controller::set()で
titleにセットすると、
$titleにセットされずに$view::pageTitleにセットされるのが原因のようです。
titleを別の名前にするのが手っ取り早いとは思うのですが、
何か他に解決方法はないでしょうか?
0546nobodyさん
2009/06/20(土) 09:35:43ID:???viewアクションだけ自作するのがよさげ
nullチェックと$this->set('title' ,$this->Title->read ・・・ くらいしかしてないから
0547545
2009/06/21(日) 00:44:37ID:???特定のアクションだけ自作とかできたんですね。
ありがとうございます。
しかしtitleが使えないとなると、なんて変数名でセットしようか・・・
こういうところで悩んでしまってぜんぜん進まない;
0548nobodyさん
2009/06/21(日) 06:29:42ID:???generateTreeList でツリー構造の連想配列で取得できないのでしょうか。
ttp://book.cakephp.org/ja/view/228/Basic-Usage
例えばこんな感じ。
$ary = array(
'id' =>1,
'name' => 'カテゴリ',
'children' => array(
'id' => 2,
'name' => '楽しみ',
'children' => array(
array('id' => 3, 'name' => 'スポーツ',
'children' => array(
array('id' => 4, 'name' => 'サーフィン'),
array('id' => 5, 'name' => 'スケート'),
),
),
array('id' => 6, 'name' => '友人',
'children' => array(
array('id' => 7, 'name' => 'ジェラルド'),
array('id' => 8, 'name' => 'グウェンドリン'),
),
),
),
),
);
0551548
2009/06/22(月) 02:56:27ID:???ちゃんとマニュアルありましたね。ありがとうございます!
ttp://book.cakephp.org/ja/view/812/find-threaded
0553548
2009/06/23(火) 05:15:19ID:???beforeFilter でコンポーネントから取得した値を
同じコントローラー内で使うのはどうすれば良いでしょうか
function beforeFilter() {
$member = $this->ComponentsName->getMember();
$this->set('member', $member);
}
function view() {
←ここで使いたい
}
変数を展開してみて上のように set していれば $this->viewVars で値は取れるのですが
1.2 でなくなる(でもなくなってない)ので使って良いものか…。
ttp://labs.uechoco.com/blog/2008/02/phpcakephpviewvars.html
0555nobodyさん
2009/06/23(火) 10:09:03ID:???適当にメンバ変数に入れてあげればよい
$this->Member = $this->ComponentsName->getMember();
※もちろんコンポーネント内で処理しても良い
setは、あくまでviewに変数を受け渡すものだから、二度手間でもview()の最後でsetしてあげてください
0556nobodyさん
2009/06/23(火) 10:15:11ID:???コントローラとアクションは引数で渡す??
cron以外はcakeで開発しているので、設定ファイル等同じものが
使えたほうがいいと思うのですが、難しいですよね。
0557nobodyさん
2009/06/23(火) 10:21:24ID:???つ http://book.cakephp.org/ja/complete/108/The-CakePHP-Console
0558nobodyさん
2009/06/24(水) 04:43:33ID:???始めはちんぷんかんぷんだったけど、なんか面白そうだ。
でもさ、命名規則が煩わしいし、よくわかんねー。例えば、
Php
Phps
php
phps
どれか一つでも違ってたらアウトだよね?
「php」っていうキーワードがあるなら、なんでそれを全体に
反映させないのかと思った。プロジェクト毎に大文字小文字
や単数形・複数形を意識して、変数やパラメータを書き換え
なきゃいけないなんて。。
0559nobodyさん
2009/06/24(水) 04:52:58ID:???0560nobodyさん
2009/06/24(水) 08:14:51ID:???0561nobodyさん
2009/06/24(水) 09:28:04ID:???まずCoC(やDRYとか)の概念を理解することがRoR流のフレームワークを学ぶときの近道。
命名規則はすぐ慣れるから安心しる(なぜそうなのかが分かれば間違えることはない)
0562nobodyさん
2009/06/24(水) 16:18:05ID:???単数複数の概念があると、単数形や複数形で書くメリットも大きい。
あと、単数複数が間違ってたら、エラーページが出てきて
「○○ってクラスがねえから、こんな感じで書け!」って
教えてくれるので単数複数を間違えてもすぐ気づくし。
0564nobodyさん
2009/06/24(水) 17:59:42ID:???俺も苦労した。
今のバージョンは
indexs でOKだけど、以前は
indexcies? にしないとエラーになった時があった。
0565nobodyさん
2009/06/24(水) 20:31:06ID:???datumなんて知らねえよ
0566nobodyさん
2009/06/24(水) 23:20:54ID:???やたら覚えさせられたが。
俺はもう古い時代の人間なのか。
0568nobodyさん
2009/06/25(木) 01:25:04ID:BlJ0aidQecho $form->end('Save Post');
これでフォーム作って送信したあとのURLがパラメーターを持つようにしたい
場合どうしたらよいのですか?
http://localhost/cake/posts/add/1
この画面で送信ボタン押して制御が画面に戻った後
http://localhost/cake/posts/add
になってしまいます。
0570nobodyさん
2009/06/25(木) 02:24:42ID:???基本的にはマニュアル見るのが早いかつ確実
ttp://book.cakephp.org/ja/view/186/options-url
>>569さんのでもいいけど。
<?php echo $form->create(null, array('url' => array('controller' => 'recipes', 'action' => 'add', 'id' => '1'))); ?>
のほうが柔軟性がある。
どう柔軟性があるかっていうと、route.phpで変更したときに柔軟性がある。
0572nobodyさん
2009/06/25(木) 09:05:29ID:???$form->create('Post', array('url'=>'/'.$this->params['url']['url']));
0573nobodyさん
2009/06/25(木) 09:21:19ID:???$form->create('Post', array('url'=>$this->here));
>>570でも良いが、namedと勘違いされないためには↓じゃね?
$form->create(null, array('url' => array('controller' => 'recipes', 'action' => 'add', '1')));
createは複雑なルーティングしてると苦労する
prefixとparamsルーティングあると思うようにリバースルーティングしてくれなくて挫折した
正攻法は後者。うまくいかないときは前者で対処してる
0574nobodyさん
2009/06/25(木) 17:16:17ID:BlJ0aidQサーバー停止してしまうと、モデルのなにかが初期化されてしまうのでしょうか?
0575nobodyさん
2009/06/25(木) 17:21:59ID:BlJ0aidQ0576nobodyさん
2009/06/25(木) 20:08:20ID:???あくまで推測の域だが、save後にlastidが取れるのはセッションに
保存してるからじゃないかな。mysqlみたいにSQLで用意してる
DBもあるけど、そうじゃないのもあるし、セッションが失われる行動を
取ると当然なくなると思う。
オートインクリはサポートしてないDBもあるから、それに合わせた
コーディングが出来てないんじゃないの?
ソースとかマニュアル見てみたけど推測の域を出ないな。
0577nobodyさん
2009/06/26(金) 02:57:40ID:???すいません!再起動、関係なかったです。
原因は↓でした。
http://www.mono-space.net/blog/php/e070405_insert_or_update.htm
上記レス(568〜)の修正によってURLのパラメーターが取れるようになったんですが
勝手にIDにセットされ、insertできなくなったのでした。
修正前に再起動していた為、apache/mysqlのせいだと思い込んでました。
■ このスレッドは過去ログ倉庫に格納されています