のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,646,047人
昨日:no data人
今日:
最近の注目
人気の最安値情報

私的良スレ書庫

不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

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

php スレッド一覧へ / php とは? / 携帯版 / dat(gz)で取得 / トップメニュー
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
レスフィルター : (試験中)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
1 : nobodyさん - 2013/09/09(月) 01:56:10.19 ID:m9OPw/HT (+125,-30,-285)
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
2 : nobodyさん - 2013/09/09(月) 01:58:03.76 ID:m9OPw/HT (+27,-29,-36)
無いので建てた
過去ログのタイトル記入漏れ

【PHP】フレームワーク CakePHP 15ホール目【v2.2】
http://kohada.2ch.net/test/read.cgi/php/1354593996/l50
3 : nobodyさん - 2013/09/09(月) 16:35:03.60 ID:??? (+32,+29,-105)
テンプレが貼られるのを待たず質問。CakeDCって何ですか?
「CakeDCとは」でググったんですけど出てきませんでした。
CakeDCのユーザー認証は標準のユーザー認証機能より良いんですか?
CakeDCのデメリットはありませんか?
あと、「CakeDC」でググると一番最初に出てくるサイトは
「このサイトは危険にさらされている可能性があります。」
とか書いてありますけど大丈夫ですか?
4 : nobodyさん - 2013/09/09(月) 17:07:58.33 ID:??? (+36,+29,+0)
>CakeDCって何ですか?

CakePHP のコアデベロッパーが多数在籍してるSIer
CEOがCakePHPの元開発リーダー
以前ほどは CakePHP の開発における依存度は高く無いとはいえ、影響力は絶大。
Github のリポジトリで公開しているプラグインはどれも有名で多くのユーザーが使ってる模様。


>CakeDCのユーザー認証は標準のユーザー認証機能より良いんですか?

Usersプラグインのことでしょうか?
だとすると、CakePHP の機能を置き換えるものじゃなくて、
補完および隠蔽して使いやすくしているのだとおもう。


>CakeDCのデメリットはありませんか?

ネットの評判を見る限り、特に致命的な欠陥はないでしょう。
実際には実装に応じて要求が異なるので何がデメリットになるのかは場合により異なる。
CakeDCに限らないが、どのプラグインを使うにしてもひと通りソースを読めないと安心して運用するのは厳しいと思うよ。

WordPress みたいな気軽な感覚(それも問題あるけど)で
初見のプラグインをホイホイ放り込んですんなり使えるとは思わない方がいい。
5 : nobodyさん - 2013/09/09(月) 17:12:55.63 ID:??? (+31,+29,-38)
>あと、「CakeDC」でググると一番最初に出てくるサイトは

ググったトップがどれのことか分からんが、
http://www.cakedc.com/
ならそんなエラー俺の環境じゃ出てこなかったけどな。
6 : nobodyさん - 2013/09/09(月) 23:06:57.23 ID:??? (+35,+27,-91)
>>4-5
ご丁寧なレス頂き本当にありがとうございます。
Usersプラグインのことです。
>初見のプラグインをホイホイ放り込んですんなり使えるとは思わない方がいい。
と言うのは肝に銘じます。

>>5に関しては日本語でググってしまったので
「プラグイン/CakeDC/users - CakePHP2 Memo」
と言うページがトップに来ました。
URLは念のためあえて貼りません。
7 : nobodyさん - 2013/09/10(火) 00:28:29.95 ID:??? (+27,+29,-65)
Usersプラグインは、プラグインとは名ばかりのサンプル実装と考えたほうがいいよ。
サンプルといっても、微妙なつくりになってるところもあるから、
使えるところだけ参考にしながら別途書くのがいい
8 : nobodyさん - 2013/09/10(火) 22:27:53.62 ID:??? (+12,-30,-74)
cakephp2を触り始めて日記を作ったのですが
URLを直で .../delete/1 などとすると
An Internal Error Has Occurred.というエラーがでて削除はされないのですが

自分でhtmlファイルを作り そこにポストでボタンを作成し日記のデリートURLに飛ばすと普通に削除できてしまいます

これは自分のコントローラーが悪いのかどこか書き方が間違っているのでしょうか?
9 : nobodyさん - 2013/09/11(水) 00:00:08.07 ID:??? (-26,-29,-85)
山ほど可能性があるのでそれじゃ情報少なすぎる。

まずそのエラーが出てるってことはデバグの出力を抑制してるんじゃない?
質問する場合は必ず Configure で debug の値を 2 にしておく。
それだけで解決することも多い。
で分からなければ、出た文面をそのまま貼り付ける。

ただ文面から推測すると、bake したコントローラをそのまま使ってるっぽいが、違う?
11 : 8 - 2013/09/11(水) 00:23:34.10 ID:??? (-27,-30,-294)
ちょっと自分でもわからず書いていますのでわかりにくかったらすいません。

普通に作ったダイアリー上で削除ボタンはしっかり動作します

URLを直に/delete/id とすると
Error: The view for diarysController::delete() was not found.
とでます。これは普通ですよね?URLから削除をさせないため、ほかのとこにアクセスさせないため

少しいろいろ書いてあるので消しましたがたぶんこれで動いてるはずです
public function delete($id) {
if ($this->request->is('post') || $this->request->is('put')) {
$this->Diary->delete($id);
$this->redirect(array('action' => 'index'));
}

ここまで正常だと思うのですが
自分で作ったhtmlファイルに
<form action="自分のURL/delete/ID" method="post">
<input type="hidden" name="_method" value="POST"/>
<input type="submit" value="DELETE">
</form>

で記述してこれで投げると消されてしまいます
どうすれば解決できるのでしょうか・・・?
ポストを判定するまえになにか条件いれればいいのでしょうか?
12 : nobodyさん - 2013/09/11(水) 01:35:06.52 ID:??? (+32,+29,-211)
CakePHPは初心者も大事にするFWなんでお答えします。
結論から言うと、質問の中にそもそも答えが含まれてる。

> Error: The view for diarysController::delete() was not found.

がなぜ出力されるのかというと、アクションの結果を描画するためのビューがないっていうこと。
なので、このエラーそのものと、レコードが削除されないことは実は関係がない。

> URLから削除をさせないため、

の措置はアクション内部でのリクエストタイプ判定で行ってる。
で、これがほんとうに意味が分かって言ってるんなら、質問の答がこれですよ。
URLを直接叩いて削除しちゃうと良くないことが多いので、そうしないようにコードに記述してる。
つまり、コントローラが悪いのじゃなくてリクエストの仕方が悪いだけ。

> ほかのとこにアクセスさせないため

「ほかのとこにアクセス」が意味不明だが、リダイレクトの事を言ってるのならば、
別にそういうふうに作りたければそうすればよいだけで、このエラーの内容とは直接関係がない。
13 : nobodyさん - 2013/09/11(水) 01:35:43.16 ID:??? (-27,-30,-280)
> if ($this->request->is('post') || $this->request->is('put')) {

で判定してる $this->request というのは自動的にセットされる CakeRequest のオブジェクトで、
リクエストに纏わる諸々のデータ・構造が内包されてる。
こいつの CakeRequest::is() メソッドでリクエストタイプを判定して、POST か PUT なら
モデルに対して削除を命令して、「描画せずに」array('action' => 'index') へリダイレクトする。
ここでこのリクエストに対する処理は終わり。(厳密には多少の後処理はある)

ちなみに分かってるかも知れないけど、この array('action' => 'index') っていうのは URL そのもので、
足らないパラメータ('plugin' や 'controller') はRouter で自動補完されて完全なフルパスにパースされる。


で、先程のは POST か PUT の場合だけど、それ以外(まぁGETだが)は評価ブロックを抜けて
通常のレンダリングに移行する。
仮に Diaries/delete.ctp を配置しておけば上記のエラーは出ないというだけ。

こんな説明で分かりましたか?
15 : 8 - 2013/09/11(水) 02:09:49.14 ID:??? (-27,-30,-225)
とても詳しく説明してもらってすいません

書き間違えはすいません 日記のようなものを作っています。少し改変しました

ちょっと補足します
> URLから削除をさせないため、

というのはその通りです。
> ほかのとこにアクセスさせないため
なんでもないです。すいません

>仮に Diaries/delete.ctp を配置しておけば上記のエラーは出ないというだけ。
エラーは別にあってもなくてもいいのですが

<form action="自分のURL/delete/ID" method="post">
<input type="hidden" name="_method" value="POST"/>
<input type="submit" value="DELETE">
</form>

この部分の回答がほしくて理解不足でもう出ていたらすいません

日記はその書いた人した消せない仕様なのですが
メモちょうなので↑のコードを書いてそこにあるボタンを押すことでどのIDの日記でも削除できてしまう
のをどうしたらいいかの回答がほしいです


ちょっと自分のやっていることが特殊なのか言葉不足なのかもしれません。
17 : nobodyさん - 2013/09/11(水) 02:28:30.27 ID:??? (+32,+29,-141)
あぁ、権限の話でしたか。
消したいのに消せないので困ってるのかと勘違いしてた。

それなら CakePHP 以前に、PHPでリクエストを送ったユーザーを
どう識別するのかってことが分かってないと。

実現する便利な機能(端的に言うと AuthComponent ですね)
は備わってるけど、"PHP ログイン 認証" とかでググって
まずは素のコードが書けるようになってから Cake に
再チャレンジした方がいい。

今のままだとサンプル見てもどの部分がCakeの機能で、
どの部分がPHPなのかさっぱりわからない状態じゃないかな?

もしそうならいったん基礎に戻ったほうが結局は早く理解できて効率がいい。
18 : 8 - 2013/09/11(水) 02:35:31.22 ID:??? (+33,+29,-53)
ポスト判定をする前にまずログインしてるか調べてそのあとユーザーとその日記の書いたユーザが一致か調べればいけますかねぇ・・・

きっちり基礎ができているとは言いがたいですけどがんばって見ます
19 : nobodyさん - 2013/09/11(水) 02:46:57.82 ID:??? (+27,+29,-59)
ある程度基礎ができてるなら、上のレスで書かれてる CakeDC の
Users プラグインを使って認証を一通り実装してみるといいです。
とても勉強になりますよ。
20 : nobodyさん - 2013/09/11(水) 06:06:04.88 ID:??? (-27,-29,-26)
StackOverflowてCakeの質問してみたけど全然レスが付かない
別の質問もしてみたけどやはりレスが付かない
そもそも8 viewsしかされてないし、Cakeってだけでスルーされちゃうのだろうか
21 : nobodyさん - 2013/09/11(水) 06:25:05.97 ID:??? (-14,-8,-1)
>>20
だからどの質問だ?
url貼れ
22 : nobodyさん - 2013/09/11(水) 08:46:56.10 ID:AXWD8Gpa (+35,+29,-111)
チュートリアルを見ると1テーブルに1モデルでそのモデルに対して複数のコントロールとビューがあるパターンしかないんですけど、
自分がやりたいのは複数のビューとコントロールに対して、複数のテーブルからデータを集めてきて処理をしたいんです。
その場合、モデルで記述するクラスはテーブルを使わない独自クラス、呼び出すテーブルはアソシエーションで定義するという理解でいいですか?
モデルに使用するテーブルをクラスとして別々に記述できるといいんですけど、違うみたいだし。
23 : nobodyさん - 2013/09/11(水) 10:36:21.33 ID:??? (+37,+29,-159)
>>22
1モデル=1テーブル という図式があたかも
規則であるかのように受け取られてしまうのが
チュートリアルの欠点のように思う。

それは全く気にする必要なし。

やりたいようにやればいい。

あと、標準のプロパティで張れるアソシエーションは限界があるので
それを越えようと思えば 'joins' キーでパラメータを指定したり、
直書きする。

一例を上げると、主テーブルに対して2つのテーブルをLEFT JOINするときに、
サブテーブルのキー同士を結びつける条件はプロパティの設定では不可能。
こういうときはメソッド内で joins で指定するしか無い。

Cake3 はもう少しマシになってるらしいが。
25 : nobodyさん - 2013/09/11(水) 11:21:24.92 ID:??? (+27,+29,-3)
さすがにその頃にはCake卒業したい
26 : nobodyさん - 2013/09/11(水) 12:01:01.77 ID:??? (+16,+28,-1)
もう時間ないぞ
27 : nobodyさん - 2013/09/11(水) 12:07:33.07 ID:??? (+37,+29,-36)
>>18
お前、チュートリアル(認証系の方)にちゃんと書いてあるぞ
翻訳も完了してるんだから最低限チュートリアルやってから質問しに来い
28 : nobodyさん - 2013/09/11(水) 12:15:38.97 ID:??? (+32,+29,-36)
>>27
そういうなよ。
CakePHPのドキュメントは正直分かりにくいし、
初心者というのはいろんな情報を手探りで集めるんだし
29 : nobodyさん - 2013/09/11(水) 12:47:53.86 ID:??? (+27,+29,-29)
ぶっちゃけ公式ドキュメント見るのが一番効率悪い
よくできてないだろ、あれ
絶妙に必要な情報が欠落していて、中級者でも戸惑う
30 : nobodyさん - 2013/09/11(水) 13:02:57.78 ID:??? (+27,+29,-40)
かなり同意。
CakePHPのドキュメントは分かりにくいよね。
ぐだぐだと長い文章書いてある割りに、
開発中にあれ?どうなってるだっけ?と思った疑問には全然答えてくれない。
31 : nobodyさん - 2013/09/11(水) 13:43:15.36 ID:??? (+32,+29,-66)
そう、ボリュームが足りないとはあまり感じないんだけど
開発してたら調べたくなるようなことが、悉く載っていない
結局ぐぐってどこかの馬の骨のブログにたどり着き、
古い情報やサンプルコードを、必死で直しながら使うことになる
32 : nobodyさん - 2013/09/11(水) 18:44:25.49 ID:??? (+18,+20,-34)
ドキュメントで翻訳されていないページはみんなどうしてんの?
33 : nobodyさん - 2013/09/11(水) 20:21:07.93 ID:??? (-1,+5,-3)
そのまま読むかググるq
34 : nobodyさん - 2013/09/12(木) 01:00:10.04 ID:??? (-23,-22,-28)
apiの方かソースコードを読む
35 : nobodyさん - 2013/09/12(木) 01:45:24.46 ID:??? (+24,+29,-42)
>>34 に同じく。
ドキュメント、面白くさせようとしてるんだろうけど無駄な文章や修飾が多い。
用語のゆらぎも多い気がする。
38 : nobodyさん - 2013/09/12(木) 23:22:00.75 ID:??? (-27,-30,-49)
$this->Thread->Response->User->displayField = 'username';
$this->Thread->recursive = 2;
$thread = $this->Thread->read();

はどう?
試してないから間違ってたらすまん
40 : nobodyさん - 2013/09/13(金) 01:32:12.20 ID:??? (-27,-30,-206)
あぁ、すまん、Thread が持つ Response に含まれる User の username ね。
それなら displayField 云々は要らないな。
これは単純に User.username のデータを拾えるようにしてそれを表示すれば良いので、
一番雑なやり方だけど簡単なのは上で書いたように recursive を 2 にすればデータを取得できる。

どんな形式で返されてるかは debug() とか使って確認してちょうだい。
データアクセスはなれるまで少し面倒くさいけど仕方ないね。

ただ、このやり方で発行されるクエリはかなり大雑把。
Containable というビヘイビアの使い方をもし知らなければまずそれを覚えて損はない。
しかしこれもパフォーマンスを追求するなら酷いSELECT文になることが多い。
パフォーマンス上げたいなら最終的には細かくチューニングしなくちゃならないです。
41 : nobodyさん - 2013/09/13(金) 01:43:58.32 ID:??? (-28,-30,-185)
あと気になるのは

> $this->Thread->Response->User->displayField = 'username';
> を試してみましたが、
> Indirect modification of overloaded property AppModel::$User has no effect
> とエラーが出ました。

これは出ないはずなんだけどなぁ。
本当に Response::$hasMany に User をセットしてる?
それさえしていれば、Response::$User プロパティがコールされたタイミングで
(なければ)自動的にセットするんで上記のエラーは出ないはずなんだが。。。

> Threadの中身が表示されなくなりました。
というのは何でかよく分からんけど、どんなクエリ発行されてるのか確認すると良いと思う。
43 : nobodyさん - 2013/09/13(金) 11:34:39.66 ID:??? (-27,-30,-144)
パターン1: 継承する

/app/View/Helper/MyPaginator.php

App::uses('Paginator', 'View/Helper');
class MyPaginator extends Paginator {

}

class PostsController extends AppController {

public $components = array('Paginator' => array('className' => 'MyPaginator'));

}

パターン2: Paginator を app にコピー

/app/View/Helper/Paginator.php

(元の Paginator をそのまま貼り付けて適宜改造)


パターン1 のほうがいい。
44 : nobodyさん - 2013/09/13(金) 11:52:08.68 ID:lL7QR+Re (-9,+0,-24)
丁寧にありがとうございます
1の方法を試したのですがPHPの書式エラーが出てうまくいかなかったので、
とりあえず2の方法で実装できました
45 : nobodyさん - 2013/09/13(金) 13:19:06.74 ID:??? (-27,-25,-6)
え、どんなエラー?
ひょっとして1.3使ってる?
46 : nobodyさん - 2013/09/13(金) 13:50:01.95 ID:lL7QR+Re (+24,+29,-31)
はい。1.3です
Appなんて知らないよ、みたいなエラーでした
私自身cakePHPを使ったことないのですが、現行システムを引き継いで、
新システム+機能追加を行えという依頼が来ているので、四苦八苦しているのです
47 : nobodyさん - 2013/09/13(金) 13:54:32.98 ID:??? (-27,-30,-78)
うわぁ、大変だなぁ。

エラーは多分App知らないじゃなくて、そんなメソッドないよってエラーではないかと。
1.3 のときは App::uses() じゃなくて App::import() 使ってた。
このへんはだいぶ変わってるからなぁ。
とりあえずパターン1でもApp::uses の行を削除すれば多分動く。

あと、クラス名とか大幅に間違えてたすまん。
Paginator じゃなくて PaginatorComponent だよな。
49 : nobodyさん - 2013/09/13(金) 14:02:15.60 ID:lL7QR+Re (+25,+30,-58)
ありがとうございます。
今他の人が動作確認等をしているところなので、エラー画面を出すわけにもなので、また後で試してみます
他社が作ったシステムなのですが、不具合だらけで、よくこんなので数年運用していたな…と思えるもので
お客さんもこの制作会社に愛想をつかしたのかなと
50 : nobodyさん - 2013/09/13(金) 17:19:36.52 ID:??? (+33,+30,-74)
そう言えば何年も前に1.2で納品したサイトをこの前こっそり覗いたらまだそのまんま稼働してた。

ひょっとして裏でメンテナンスしてる?と思ったけどどうやらそのままっぽい。

あれを今こっちによこされても触る気しねぇなw
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / php スレッド一覧へ
スレッド評価: スレッド評価について
みんなの評価 :
タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

類似してるかもしれないスレッド


トップメニューへ / →のくす牧場書庫について