トップページ⇒php
1001コメント307KB

【PHP】フレームワーク CakePHP 16ホール目【v2.4】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2013/09/09(月) 01:56:10.19ID:m9OPw/HT
CakePHPは、Ruby on Railsの概念の多くを取り入れた、Rails流の高速開発とPHPの機動性を兼ね備えたフレームワークです
CakePHPから派生したLithium(li3)も専スレできるまではここでどうぞ
質問するときはCakePHPのバージョンを書きましょう

※他フレームワークとの比較等はスレ違いです

■本家
http://www.cakephp.org/
APIドキュメント
http://api.cakephp.org/
github - cakephp
http://github.com/cakephp
the Bakery
http://bakery.cakephp.org/
Issue
http://cakephp.lighthouseapp.com/dashboard
CheatSheet[1.2] (PDF)
http://cakephp.org/files/Resources/CakePHP-1.2-Cheatsheet.pdf

■日本語公式
http://cakephp.jp/
フォーラム
http://cakephp.jp/modules/newbb/
cookbook(マニュアル)
[2.x] http://book.cakephp.org/2.0/ja/index.html
[1.3] http://book.cakephp.org/ja

http://kohada.2ch.net/test/read.cgi/php/1354593996/l50
0276nobodyさん2013/10/08(火) 17:00:13.50ID:???
あぁ、HTTPリクエストとしてじゃなくて同一プロセスでか。
分かった。
0277nobodyさん2013/10/09(水) 02:02:54.44ID:???
>>274

> これで posts コントローラの index アクションを実行し、レンダリングされた結果が表示できる。

dispatch()したら、findの結果じゃなくビューをレンダリングした結果だぞ。
その1.3でできてるってのも、上記の通りだし。
02782472013/10/09(水) 09:57:04.46ID:???
>>277
1.3の場合、>>249の説明にもありますが、
以下の様なソースで、対象コントローラのfind結果を取得できます。
requestActionみたいな感じです。良かったら試してみてください。

$_GET['url'] = 'favicon.ico';
require_once 'index.php';

$Dispatcher = new Dispatcher;
$list = $Dispatcher->dispatch('/news/index', array('return' => 1));
foreach ($list as $data) {
echo $data['News']['created'] . ':' . $data['News']['title'] . "<br>";
}
0279nobodyさん2013/10/09(水) 11:28:30.56ID:???
Shell で使うShellDispatcher と ConsoleOutput と ConsoleInput を拡張して Shell を走らせてみるとか

class MyOutput extends ConsoleOutput {
public function write($messege, $newlines = 1) { // $message でデータを受け取ってあれこれする.... }
}

class MyInput extends ConsoleInput {
// 面倒なので適当に考えてくれ
}

class MyDispatcher extends ShellDispatcher {
protected function _getShell($shell) {
//... なんやかんや
$shell = new Shell($myOutput, $myErrorOutput, $myInput);
//... なんやかんや
return $shell;
}
}

----
<?php
$args = array(.....);
new MyDispatcher($args)->run();

みたいな感じで。

取得したいデータは $myOutput をパイプみたいにしてゲット。

どう?
0280nobodyさん2013/10/09(水) 14:26:40.63ID:???
天才あらわる
0281nobodyさん2013/10/10(木) 04:29:12.84ID:???
なんやかんやわろた
0282nobodyさん2013/10/12(土) 20:34:20.88ID:???
質問です。よろしくお願いします。
ユーザーが自分で更新出来るCMSを作成してます
そこでユーザーが更新するたびにgoogle等にインデックスされるようにしたいです
こういった場合みなさんはどうやってインデックスさせてますか?
cakeと関係ない質問かもしれませんが便利なやり方があるかもと思い質問しました
よろしくお願いします
0283nobodyさん2013/10/12(土) 21:40:23.39ID:???
Google買収!
0284nobodyさん2013/10/12(土) 23:39:11.12ID:???
ping送信ぐらい?
あとsitemap更新とか。
どっちにしてもGoogle次第
0285nobodyさん2013/10/13(日) 01:02:29.28ID:???
pingを自動的に送信するようにですね
ユーザーが作成したページが検索に乗るようにするって結構難しいのかな
登録・更新のたびにsitemap作成するスクリプトとか流してたら相当重くなりそうですよね
親切にありがとうございます
0286nobodyさん2013/10/13(日) 02:27:44.36ID:???
更新はともかく、新しくURIが増えるんなら、sitemap.xmlは生成したほうがいいんじゃ
0287nobodyさん2013/10/13(日) 15:45:55.81ID:fH7wT7an
>>286
ありがとうございます
深夜辺りにcronで動くように設定したいと思います
完全にスレチでした。すみませんでした
0288nobodyさん2013/10/15(火) 17:36:39.11ID:tnpde/Hs
逆アクセスを設置したいのですが、お勧めはありますか?
今は、自作 or Googleアナリティクスを考えています。
0289nobodyさん2013/10/15(火) 20:16:47.76ID:???
ACR WEB使え
0290nobodyさん2013/10/19(土) 09:01:10.85ID:???
東京からみた大阪は南チョン。
大阪から東京は北チョン。
0291nobodyさん2013/10/23(水) 01:11:43.94ID:???
コントローラの中で
getuser( $user_id, $age)
{

}
と引数を2つで指定しているとします。

http://hogehoge.com/getuser/333/25
→ OK

http://hogehoge.com/getuser/333
でアクセスされた場合に
Missing argument 2 for UserController::getuser()
というエラーが出てしまうのですが、事前にアクセスの想定されるURL以外でアクセスが来た場合に
それを上記の様なエラーが出る事無く弾くにはどうすれば良いでしょうか?


コントローラの中のファンクションで
.Net の optional 的な引数指定の方法はありませんか?
0292nobodyさん2013/10/23(水) 02:18:32.08ID:???
public function getuser() {

$args = func_get_args();
if (count($args) < 2) { ... error ... }

}
0293nobodyさん2013/10/23(水) 02:53:19.47ID:???
291です。

>>292
そんな便利なコードがあったのですね。
ありがとうございます!!
0294nobodyさん2013/10/23(水) 04:27:05.04ID:???
え?正気か?
デフォルト引数値使えよ

public function getuser( $user_id, $age = nulll ){
if(empty($age)){
// http://hogehoge.com/getuser/333 の場合
} else {
// http://hogehoge.com/getuser/333/25 の場合
}
}
0295nobodyさん2013/10/23(水) 05:35:12.35ID:???
empty使わずとも、nullしてるんだからifだけでいいじゃん
0296nobodyさん2013/10/23(水) 11:58:33.55ID:???
サンプルだからelse書いたけど、$ageがない場合にちょっと処理入れるだけってのが多くね?
だから、empty($age)から書いたが、このままじゃ分かりにくいと思ってelseを後付けしたんだ。
あと、例外的なほうから書くほうが好みというのもあるけど。
0297nobodyさん2013/10/23(水) 13:17:01.27ID:???
>>294
色んな方法があるんですね。
0298nobodyさん2013/10/23(水) 22:10:06.74ID:???
いろんなっつうか、>>292 を常用してると死ぬぞ
0299nobodyさん2013/10/23(水) 22:22:55.02ID:TvTq8mzB
>>298
なぜ?


あと、関係ないけど
ERROR:referer情報が変です。(ref1)http://www.engawa.2ch.net/test/read.cgi/budou/ほげほげ/l50

武道板になぜか書き込みができないんだけどなぜ?
0300nobodyさん2013/10/24(木) 00:57:55.24ID:ZRTs6kHv
cakePHP でMySQLの Limit 句と同じ事を以下の様なコードを記述し
試しているのですがなぜかデータの絞り込みが出来ません。
また、何もエラーも出ません。

$data_company = $this->find('all', array(
'conditions' => array( 〜 略 〜 ),
'fields' => array('company_id','company_name'),
'order' => array('sequence_number' => 'asc'),
array('offset' => '0','limit' => '5'),
));


ここでは、取得対象データが300件返って来るけれども
5行のみ取得する、という事を想定して記述しています。

どこに問題があるのでしょうか?
0301nobodyさん2013/10/24(木) 01:30:15.64ID:???
>>300
orderのカッコと、fieldsとoffsetを囲ってあるカッコを取って下さい。
0302nobodyさん2013/10/24(木) 01:32:31.18ID:???
こんな感じ。
$data_company = $this->find('all', array(
'conditions' => array( 〜 略 〜 ),
'fields' => array('company_id','company_name'),
'order' => 'sequence_number asc','limit' => '5',
));
0303nobodyさん2013/10/24(木) 02:29:39.52ID:???
>>301 >>302
ありがとうございます。
やりたかった事が出来そうです!!

※cakePHPに標準で備わっているページング処理よりも
自前でコーディングした方が後々細かい制御が出来てよいと思ってましたので
limit使ってガリガリやろうと思います。
0304nobodyさん2013/10/24(木) 02:53:38.76ID:???
>>303
絶対ページング使うべき。
ajaxにも対応してるし。
0305nobodyさん2013/10/24(木) 03:28:39.25ID:???
ですね。使わないと損。
細かい制御ができないというのなら直ちに調べたほうが良い。
0306nobodyさん2013/10/25(金) 23:49:39.14ID:AB+nrtPz
>>304 >>305
前へ 次へ ... >> <<

色々とやってましたが素直にページング使った方が楽そうなのでページングを使い始めました^^b
0307nobodyさん2013/10/26(土) 21:52:14.71ID:Zi7Pbhr3
$work_check_number には、 float型の0.4が入っています。
この状態で以下のコードを実行すると想定外の出力結果が
返って来ます。何が間違っているのでしょうか?

var_dump($work_check_number);
echo "<br>";

if ( $work_check_number <= (float)0.4 )
{
echo "debug-1<br>";
}
else
{
echo "debug-2<br>";
}

【想定出力結果】
float(0.4)
debug-1


【実際に出力される結果】
float(0.4)
debug-2
0308nobodyさん2013/10/26(土) 22:11:25.69ID:5t9gsaZZ
http://ryo511.blog.jp/archives/23887883.html
0309nobodyさん2013/10/27(日) 03:55:38.51ID:???
>>308
勉強になるますだ
0310nobodyさん2013/10/27(日) 17:26:30.48ID:dxTjMq1b
phpでfloat型の大小比較って凄くメンドクサイな。
0311nobodyさん2013/10/27(日) 17:47:06.22ID:???
>>310
大小比較とこの問題は関係ないよ
IEEE754を採用してる言語なら事情はどこも似たようなもの

$a = 0.4;
$b = 0.4 + 2.2204460492503131e-016;

var_dump($a); # float(0.4)
var_dump($b); # float(0.4)
var_dump($a == $b); # bool(false)
var_dump($a < $b); # bool(true)
0312nobodyさん2013/10/27(日) 17:57:13.61ID:???
>>310
どの言語でもそうだと思うよ
0313nobodyさん2013/10/28(月) 10:28:14.68ID:???
てか、小数点は上手くいかない場合多いから、使わないな
俺の使い方が悪いだけかもしれないが
0314nobodyさん2013/10/31(木) 15:20:24.96ID:S0k5dQpe
cakePHP の Model で SQL で言うところの IN 指定はどうやって記述すればよいのでしょうか?
0315nobodyさん2013/10/31(木) 15:25:47.92ID:???
>>314
arrayを渡す
0316nobodyさん2013/10/31(木) 16:24:28.47ID:???
informationは確かに変化しない英単語かもしれんけど、
だからってinformationテーブルにInformationControllerが正しいと、
それなりに開発が進んでから気がついたときの怒りは、
どこにぶつければいい?
0317nobodyさん2013/10/31(木) 18:32:50.75ID:S0k5dQpe
>>315
ありがとうございます。
無事出来ました!!
0318nobodyさん2013/10/31(木) 18:53:54.33ID:S0k5dQpe
select
user_id, user_age,user_nme
from users where
( user_id = 1 and user_age = 30 )
and ( user_id = 2 and user_age = 25 )
and ( user_id = 3 and user_age = 28 )

cakePHPのconditionsで上記の様なSQLを実行させる書き方はありますか?


'conditions' => array(
'users.user_id =' => 1,
'users.user_age =' => 30,
),

現在ループしながら複数クエリを発行しているのですが
纏めて1回のクエリで必要データを取得したいと考えています。
0319nobodyさん2013/10/31(木) 20:03:43.30ID:???
>>316
英語の勉強を疎かにしてきた自分を呪えば良いと思うよ
まぁ、冗談は抜きにして、英語の基礎ができてないと色々とキツイよな。
0320nobodyさん2013/10/31(木) 20:07:38.67ID:???
>>318
あの・・・ and はカッコ外しても論理構造同じですが。

もし 'or' を入れたいのなら、キーに 'and' とか 'or' とかを用いて
幾重にも入れ子に出来たはず。

キーが数値の場合は 'and' として解釈するんだったっけ。
0321nobodyさん2013/10/31(木) 20:08:43.64ID:???
っていうか、その元のクエリ何だよw
0322nobodyさん2013/10/31(木) 20:10:49.38ID:???
(間違い) and はカッコ外しても論理構造同じ
(正しい) and だけの場合はカッコ外しても論理構造同じ

ミスった
0323nobodyさん2013/10/31(木) 20:11:08.33ID:pvMz+FsK
>>320 >>321
間違えました。

ただしくは、

select
user_id, user_age,user_nme
from users where
( user_id = 1 and user_age = 30 )
or ( user_id = 2 and user_age = 25 )
or ( user_id = 3 and user_age = 28 )

です。 キーに or を入れて試してみたいと思います。
0324nobodyさん2013/10/31(木) 20:15:46.01ID:???
$cond1 = array('user_id' => 1, 'user_age' => 30);
$cond2 = array('user_id' => 2, 'user_age' => 25);
$cond3 = array('user_id' => 3, 'user_age' => 28);

$conditions = array('or' => array($cond1, $cond2, $cond3);
0325nobodyさん2013/10/31(木) 20:23:43.34ID:pvMz+FsK
>>324
あざーすっ!
コードがすっきりしました!!
0326nobodyさん2013/10/31(木) 20:38:39.33ID:???
まあmysqlはor使うと遅くなるんだけどね
0327nobodyさん2013/10/31(木) 23:42:41.93ID:???
漢ならフルスクラッチ
0328nobodyさん2013/11/01(金) 00:32:03.09ID:???
女傑ならソケットでMySQLプロトコル
0329nobodyさん2013/11/01(金) 17:39:10.37ID:???
>>316
bakeすればいいのに
0330nobodyさん2013/11/01(金) 17:45:57.99ID:???
bakeはほぼ使わないなぁ
0331nobodyさん2013/11/01(金) 22:05:00.04ID:???
テーブルのレコードに突っ込んでる時点で数えられるから問題ない
外人がfishesという単語を見て魚の缶詰を思い浮かべるのと同じ
0332nobodyさん2013/11/02(土) 01:30:30.01ID:???
bake 使わない開発が想像できないんだが
0333nobodyさん2013/11/02(土) 09:23:48.01ID:???
いつも0から作り始める人ならそうだろうね
0334nobodyさん2013/11/02(土) 14:49:14.45ID:YSV0Zcpf
bake とか使った事がない。
そもそも何に使うの?

良い解説サイトがあったら教えてください。
0335nobodyさん2013/11/02(土) 18:00:44.69ID:???
別にbakeを使う必要はない。
bakeってのはCakePHPが参考した
Railsで使われていた仕組みで、


たんに、こんなに早く作れるんだよと
なんども練習して撮影したデモを
一秒でも短くするために生まれた道具にすぎない。

そう。3分クッキングのように、
あらかじめ用意しておきましたって
コードを生成するもの。
0336nobodyさん2013/11/02(土) 18:25:11.54ID:???
Searchプラグインって標準では、区切りに全角スペースでは、複数単語検索できないんだね
不便だわ
0337nobodyさん2013/11/02(土) 20:32:04.62ID:???
ある程度まとまった複数のモデルを bake all して、
それをごそっとプラグインに隔離して
適宜削ったり追加したり開発するのはとても便利で早い。
0338nobodyさん2013/11/02(土) 20:42:12.21ID:oRF20owz
html5 で作られた infinite mario すげぇえ。

とおもってたら グラディウスまで作ってる強者がいた。

ここまで出来るのか。。。
0339nobodyさん2013/11/02(土) 20:43:40.35ID:oRF20owz
http://rappdaniel.com/experiment/cubed/

html5 でここまでできるのか。
0340nobodyさん2013/11/02(土) 22:07:26.87ID:???
うちは管理用の画面作るときはまず bake から始めるけどなぁ。
誰が作ってもほぼ同じものができるのは良いよ。
テンプレートをカスタマイズしてるから
元の姿とは全くと言っていいほど違ってはいるけど。
0341nobodyさん2013/11/02(土) 22:18:01.50ID:???
いや、ファイルコピーすればいいですし・・・。
0342nobodyさん2013/11/02(土) 22:57:11.17ID:???
>>341
(言ってはいけないことを。。。)
0343nobodyさん2013/11/03(日) 00:08:16.61ID:???
bakeって何が化けるの?
0344nobodyさん2013/11/03(日) 00:21:41.67ID:???
>>343
つまらん
0345nobodyさん2013/11/03(日) 20:14:17.87ID:???
管理画面はbakeするけど、フロント側はちょっとねぇ。
モデルも開発中盤になってくると、bakeしただけで手の入ってないモデルがいくつか出てくるから、
コピーして必要なとこだけ変えたほうが早かったりするんだよな。
0346nobodyさん2013/11/03(日) 23:30:20.68ID:???
bakeって言ったって
完全に全自動化出来るわけじゃなく、
色々質問されるしな。
前回なんて答えたかなんて覚えていないし、
bakeをする回数は少ないのですぐに使い方を忘れる。
0347nobodyさん2013/11/04(月) 01:31:23.58ID:???
>>346
うちはとにかく bake all だわ。
アソシエーションの制約なんか厳しくて、
かなり CakePHP のルールを守らないと通らないので、
それがかえって誰が作っても同じ出来になるという安心感がある。

それに、コマンドで個別に設定するぐらいならファイル直接触ったほうが楽。
0348nobodyさん2013/11/05(火) 22:46:56.28ID:HKwreGpo
cakeって便利だけど最初の設定って結構面倒じゃないですか?

あとは使っているサーバのスペックが足りなくて
別サーバに引っ越しをする時とか結構手間に感じるのですが皆さんは如何ですか?
0349nobodyさん2013/11/06(水) 00:41:09.71ID:???
なんかCakePHPならではの設定することあったっけ?
0350nobodyさん2013/11/06(水) 01:43:53.69ID:???
DBの設定は面倒だけど、1ファイルの修正で済むからな。
あと、FTPでアップした時のtmpのパーミッション設定は地味に面倒w
0351nobodyさん2013/11/06(水) 07:11:23.30ID:jY+jk4/6
>>350
確かにtmp面倒くさいよな
0352nobodyさん2013/11/06(水) 12:09:46.63ID:???
>>350
俺、多分変更してないけど問題ないな。
0353nobodyさん2013/11/06(水) 19:21:57.33ID:CGtOvjTe
>>349
例えばcakePHP2 で作っていたシステムを
新サーバ+cakePHP3 に移行する時とか大変じゃない?

cakePHP3をサーバに設定した後に、
cakePHP2のソースを手動でしかるべき箇所に移動させて
しっかり新バージョンでも動くかどうか検証とかしなくちゃならないでしょ?


一発で移動とか出来ると楽なんだけどね。
0354nobodyさん2013/11/06(水) 19:28:12.00ID:???
>>353
既存プロジェクトで使ってるフレームワークのメジャーバージョンを上げたら、
そりゃぁ大変だろうよ。
CakePHPに限らずな。
0355nobodyさん2013/11/06(水) 21:06:22.08ID:???
Cake3ってもう使ってる人いるの?
0356nobodyさん2013/11/06(水) 22:24:56.97ID:???
cakePHP2.0 で
ログインしていない場合には閲覧させない様な
クローズドコンテンツを作成しよとしています。

そこで、ログインしていない場合には閲覧させない為に
コントローラのファンクションの中で以下のコードを書いているのですが、
コントローラのファンクションの中では毎度以下の if(ログイン判定)  の
コードを記述する必要があるのでしょうか?

HogeController.php

public function top()
{
if(!$this->Auth->login())
{
//ログインしていないので特定ページ(TOP)へ飛ばす。
return $this->redirect($this->Auth->redirect());
}
}
0357nobodyさん2013/11/06(水) 22:29:20.54ID:???
>>356
Authコンポーネントを良く調べろ。
0358nobodyさん2013/11/06(水) 22:32:14.86ID:???
>>357
'loginAction' => Array('controller' => 'tops', 'action' => 'index'),

色々と試したみたのですが、これでOKですか?
0359nobodyさん2013/11/06(水) 22:39:31.12ID:???
>>358
http://book.cakephp.org/2.0/ja/tutorials-and-examples/blog-auth-example/auth.html
0360nobodyさん2013/11/07(木) 00:07:19.08ID:???
Google Cromeで指定した文字列をクリップボードに
コピーするプログラムを作っています。

$('#id_hoge' ).click( function()
{
var str_text = "あいうえお";
var copyArea = $("<textarea/>");
copyArea.text(str_text);
$("body").append(copyArea);
copyArea.select();
document.execCommand("copy");
copyArea.remove();
});


"あいうえお" がクリップボードにコピーされると思ってたのですが
なぜかされません。cromeでは使えないのでしょうか?
0361nobodyさん2013/11/07(木) 03:12:22.57ID:???
プラグインの日本語情報が異常に少ないんだよね
これじゃなかなか広まらないな
0362nobodyさん2013/11/07(木) 14:17:00.21ID:???
広まらないっていうか、これからどんどん情報減ると思うよ。
自分で調べて情報公開したりするような開発者は、
もうCakePHPなんて飽きてるだろうし。
今は、普通に使えるようになってる人が、普通に仕事をこなすのに使ってる感じじゃね。
書籍も一時期は沢山出てたけどいまはそうでもないしな。
0363nobodyさん2013/11/07(木) 14:34:27.14ID:???
猫も杓子もcakephpの時代が異常だっただけ
今はいいフレームワークがいっぱいあるし
あえてcakephpを選ぶ理由がないからね
0364nobodyさん2013/11/07(木) 14:44:14.56ID:cHcjC9vh
FWはもう、cakePHPに統一しようぜ。
0365nobodyさん2013/11/07(木) 14:52:19.69ID:???
統一するとしてもcakephpだけはやめて
codeigniter, fuelphp, laravel, yiiのどれかで
0366nobodyさん2013/11/07(木) 14:52:21.96ID:???
cakephpは日本が異常だっただけよ
今もオフショア先では大人気
0367nobodyさん2013/11/07(木) 14:55:55.60ID:???
>>365
fuelphpはpsr-0に対応しなかったこととかいろいろあって人気つかないな
codeigniter、laravel、yiiは世界では人気だけど日本だと微妙
0368nobodyさん2013/11/07(木) 15:04:27.70ID:???
http://www.techempower.com/benchmarks/#section=data-r7&;amp;hw=i7&amp;test=json

cakeぼろぼろだ
昔のライバルsymfonyには辛うじて勝利
0369nobodyさん2013/11/07(木) 16:27:36.49ID:urHtWp+p
FWといよりプログラマのスキルによるんじゃねーの。
レスポンスとかさぁ。
0370nobodyさん2013/11/07(木) 18:19:09.69ID:???
codeigniterとか作りが前時代的過ぎてなぁ・・・
その4つの中ならlaravelがいいな
0371nobodyさん2013/11/07(木) 18:25:45.15ID:???
Sinatra風のルーティングは見やすいんだが
PHPとは相性が悪い
リクエストの度にパスの数だけClosureオブジェクトを作ってると考えたらぞっとする
0372nobodyさん2013/11/07(木) 20:37:01.47ID:???
Sinatra風ルーティングは、マイクロFW系向きじゃないかな
0373nobodyさん2013/11/07(木) 20:55:50.09ID:TVGLaC0N
悪い事は言わない

Yiiを使える、進めるヤツはせめてToeic 800点位とってから使おうな。
英語も出来ないのに間隔で変な名前をあちこちに量産されたら迷惑
0374nobodyさん2013/11/07(木) 23:10:35.42ID:???
>>373
なんでYii限定?
0375nobodyさん2013/11/07(木) 23:33:39.73ID:???
TOELCといえばYii
■ このスレッドは過去ログ倉庫に格納されています