トップページ⇒php
1002コメント356KB

【PHP】フレームワーク CakePHP 17ホール目【v3α】

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2014/08/02(土) 21:57:41.01ID:LI0DdohH
CakePHPは、Ruby on Railsの概念の多くを取り入れた、高速開発とPHPの機動性を兼ね備えたフレームワーク
質問するときはCakePHPのバージョンを書きましょう

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

■本家
http://www.cakephp.org/
APIドキュメント
http://api.cakephp.org/
github - cakephp
http://github.com/cakephp
the Bakery
http://bakery.cakephp.org/
cookbook(マニュアル)
[3.x] http://book.cakephp.org/3.0/
[2.x] http://book.cakephp.org/2.0/ja/
[1.3] http://book.cakephp.org/1.3/ja/
Twitter
https://twitter.com/cakephp
Facebook
https://www.facebook.com/CakePHP

■日本語公式
http://cakephp.jp/
フォーラム
http://cakephp.jp/modules/newbb/


※前スレ
http://kanae.2ch.net/test/read.cgi/php/1393661004/
0175nobodyさん2014/12/26(金) 22:05:31.40ID:???
ただの見た目の問題なんだしCSSでやればよくない?
IE8? 知らないブラウザですね
0176nobodyさん2014/12/26(金) 22:20:14.73ID:???
>>174
そういうのは出来ないと思う。
javascript で挿入するか >>175 の言うように CSS でやるか、
レンダリング結果をパースして変換。
今なら :n-th セレクタ使えるから CSS が一番手っ取り早いだろうね。
0177nobodyさん2014/12/27(土) 09:59:18.74ID:???
>>175-176
レスありがとうございます。
やっぱりできないんですね。

仰る通り、見た目の問題ですのでCSSで制御しようと思います。
ありがとうございました!
0178nobodyさん2014/12/30(火) 14:19:54.96ID:9yoyGP6/
cakePHPで入力フォームを用意して登録ボタン押下時に
サーバにポストした場合、サーバサイドでは

入力項目においてdisabled を付けている項目は $this->request->data で取得出来ない
のは仕様なのでしょうか?
0179nobodyさん2014/12/31(水) 10:07:14.07ID:???
>>178
cakeでなくhtmlの仕様
0180nobodyさん2015/01/01(木) 14:03:44.77ID:qSREffE+
>>179
ありがとうございます。解決しました。
0181nobodyさん2015/01/02(金) 09:29:55.89ID:jgbndoA2
cake2.5.8でfacebookをつかって認証してるのですが、
デバッグモードが2もしくは1の時は問題なくログイン・ログアウトできるのですが、
0にするとできなくなります。
http://www.msng.info/archives/2010/12/cakephp-error-only-when-debug-level-is-0.php
にある$this->autoRender = false;
は入れてあるのですが、他に解決策はありますか?
0182nobodyさん2015/01/06(火) 01:58:05.89ID:???
:n-th知らなかったから試しに使ってみたけど結構便利だね
けどIE8は効かないということなんで、
IE8を対象外にするわけにもいかず結局開発では使えなかった・・・
181はもうちょっと具体的にどんな実装をしたのかとか
どんなエラーが発生しているのかとか報告しないと答えようがないんじゃないかな
0183nobodyさん2015/01/06(火) 20:15:42.85ID:???
IE8早く爆発しろ
0184nobodyさん2015/01/06(火) 21:00:09.97ID:???
IE6はようやく考えなくても良くなったけどね…
IE8はまだ15〜20%ぐらいあるから、簡単には切れないよね
0185nobodyさん2015/01/06(火) 21:26:44.31ID:???
ご老体のIE8様は別枠でJavaScriptで介護して差し上げろ
0186nobodyさん2015/01/07(水) 14:32:26.18ID:???
嫌だ。もう無視する。
0187nobodyさん2015/01/07(水) 20:54:00.88ID:???
自社開発webアプリでもない限り
開発側にブラウザを選ぶ権利はなくて顧客側の要望次第だろう
今まで対応していたブラウザを切りたければうまく交渉するしかないね
IE8は全然許せるけどIE6はブラウザ界のガン細胞だと思う
0188nobodyさん2015/01/09(金) 12:45:51.25ID:NOQO6qeZ
Formでデータベースに保存した画像の表示が出来ないんだけどどうやるんだ・・・
保存した物をforeachで取り出したいけどエラー地獄だわ・・・
0189nobodyさん2015/01/11(日) 14:25:23.64ID:???
そもそも画像保存にDB使うなよ
0190nobodyさん2015/01/14(水) 16:05:28.03ID:FY0jfzBq
cakephp2を使っているのですが、URLを.htmlにすることは可能でしょうか?

http://www.hagehage.com/tururi/index.html

のような形にしたいのですが。
0191nobodyさん2015/01/15(木) 00:37:14.38ID:HkjxQN1G
>>190
多分この辺の情報が役に立つと思われ
http://stackoverflow.com/questions/3410611/how-can-i-append-html-to-all-my-urls-in-cakephp

昔調べたときは、あぁ簡単にできるんだな、ぐらいに思って一度も使ったことがないからよくわからないや。
0192nobodyさん2015/01/15(木) 00:39:51.88ID:???
読んでみたら一番上の答の人がドキュメントに詳しく載ってるって書いてたなw

http://book.cakephp.org/2.0/en/development/routing.html#file-extensions
0193nobodyさん2015/01/15(木) 08:59:40.27ID:gSrUDeRO
>>191-192
ありがとうございます!
見てみます!
0194nobodyさん2015/01/15(木) 16:42:24.08ID:+TbruyRA
View側で hidden で隠し設定した値をコントローラ側で受け取る方法はありませんか?
0195nobodyさん2015/01/15(木) 17:10:54.40ID:???
>>194
あります
0196nobodyさん2015/01/16(金) 00:22:26.90ID:???
hidden てそもそも表示は隠しつつデータを受け取るためのものだろ。。。
意味不明
0197nobodyさん2015/01/16(金) 01:25:11.15ID:K/pOgg26
>>195
どうやってやるんですか?
Ajaxだと余裕ですがcakePHPでPOSTした場合にどうしても取得出来ません。

>>196
Viewのレンダリング時にhiddenに設定した内容を登録ボタンを
押した際にサーバ再度でhidde項目の値を取得したいのです。
0198nobodyさん2015/01/16(金) 04:52:36.72ID:???
>>197
普通に取得できるだろ。

おれの読解力に問題があるのだろうが、何いってるのかさっぱり分からん。
0199nobodyさん2015/01/16(金) 12:44:01.48ID:GWt4KHXH
>>198
≪View≫
<input type="hidden" name="name_hidden" value="komaneti">

≪Controller≫
$this->request->data["name_hidden"];
⇒issetで値があるかを判定するとfalse(つまり存在しない)となります。


はたして(PHP単独ではなく)本当にcakePHPでhidden項目の
値の取得をサーバ側(Controller)でする事は出来るのでしょうか?
0200nobodyさん2015/01/16(金) 13:29:28.04ID:???
hiddenまったく関係なくてnameが間違ってるだけじゃん
正しくはこう
<input type="hidden" name="data[name_hidden]" />

普通はフォームヘルパーで書くもんだよ
<?php echo $this->Form->hidden('name_hidden'); ?>

どうしてもnameを変えたくないなら$_POSTか$_REQUESTでどうぞ
あまりにも基本レベルで理解できてないようなんで、
まずはブログチュートリアルを実際にやってみたほうがいいよ
ブログチュートリアルって何?って人はそもそもマニュアル読んでない証拠なんで問題外
0201nobodyさん2015/01/16(金) 14:51:16.48ID:???
>>200
name="data[model_name][field_name]"
じゃないの?

どっちにしてもチュートリアルやってないような奴に何言っても時間の無駄だが
02022002015/01/16(金) 15:28:30.64ID:???
>201
199の例文に合わせただけだよ
モデル名も入れた君の例なら取得側が
$this->request->data['model_name']['field_name']
になるってだけ
0203nobodyさん2015/01/17(土) 19:58:26.44ID:???
なゆあかか
0204nobodyさん2015/01/18(日) 01:38:43.72ID:YMMCDK0S
すいませんが相談させてください。
wordpressでとあるポータルサイト(1日のPVは1,000程度)を運営しているのですが、
今後、数十万件以上(WPのカスタム投稿で)のデータを登録する予定となったので、
wordpressで構築するのは負荷的に耐えられないのかと思い、
CakePHPで構築しなおそうと思っています。

という状況なのですが、CakePHPにしたからwordpressよりも早くなるとは限らず、
むしろ遅くなる可能性もあるのでしょうか?
(フレームワークとしてCakeにこだわってはいないので、採用するのは他のフレームでも構いませんが)
ググってみたりはしたのですが、この比較対象がおかしいということもあるのか、
比較記事は見当たらず、私自身がCakeの事を本質的に理解出来ていないこともあり、困ってしまっています。
WPの中で生のSQL文を書いて、直接データ登録・取得・表示するのが良いのかなと
アホみたいな事も思い始めていますが・・・・

ちなみに私自身のスキルとしては、以下の感じです。
DB:基本的に大抵のことは出来て問題無い、テーブル結合とか検索とかの事は生のSQL文を書ける
PHP:wordpressのテーマを自分でガリガリとカスタマイズして外部からの入力フォーム・表示フォームとかは自分で作成しているが、難しい事は分からない
HTML・CSS:他サイトを見よう見まねで学んでいる状態で、ちゃんと理解出来ていない事が多い
0205nobodyさん2015/01/18(日) 01:53:17.52ID:???
>>204
お前は「そんな可能性はない」と言われたらCakePHPにするのか?
そうじゃないだろう?

だったらなぜまず試さない?
試してみて遅かったら、その原因を聞きにくるというのがやり方じゃないか?
もちろん、聞きにくるときは、それなりの情報を出しながらだが
0206nobodyさん2015/01/18(日) 13:36:16.56ID:???
>>204
CMSとフレームワークの違いがわかってないのかな?
wordpressはCMSの部類でコンテンツ管理する仕組みが既に入っているけど
cakephpみたいなフレームワークは言ってみりゃ単なる便利ライブラリ集だから
コンテンツ管理する仕組みとかは全部自分で実装しなきゃいけないよ
0207nobodyさん2015/01/18(日) 17:42:38.18ID:???
脆弱性作り込んでそう

そんなあやふやな知識で博打を打つくらいなら
DBのチューニングやPHPアクセラレータの導入などしてWordPressの高速化をはかるほうがマシだと思う
翻訳止めるだけでも結構速くなるしな

DBからの読み出しメインのサイトなら、
前段にvarnishやnginxを置いてリバースプロキシキャッシュでも使えば?
0208nobodyさん2015/01/19(月) 00:27:11.87ID:???
>>204
そもそもPHPで作るのが間違い
0209nobodyさん2015/01/19(月) 18:10:55.81ID:oaFQh/MS
2015/02/02
⇒OK

cakePHPの正規表現でこの日付型文字列の入力のみOKとするには
どういうコードを書けば良いでしょうか?


2015/2/2
⇒NG
0210nobodyさん2015/01/19(月) 19:25:44.90ID:???
>>209
cake関係ないじゃん
0211nobodyさん2015/01/19(月) 19:59:44.14ID:oaFQh/MS
>>210
どうやって判定すれば良いのでしょうか?
0212nobodyさん2015/01/19(月) 20:18:16.07ID:???
>>211
validationの方法は一通り知った上での質問なんすか?
0213nobodyさん2015/01/19(月) 21:40:22.05ID:oaFQh/MS
>>212
はい、教えてください。
0214nobodyさん2015/01/19(月) 23:55:25.95ID:???
じゃあカスタムバリデーションルール作って
public $validate = array(
 'myDatetimeCheck' => array(
  'rule' => '^[0-9]{4}\/[0-9]{2}\/[0-9]{2}$',
 )
);
みたいにすればいいのでは
このパターンはケタ数しかチェックしてないから日付には使えないけど
0215nobodyさん2015/01/20(火) 00:39:05.11ID:MQEJ/fBy
>>214
サンクス


正規表現が苦手なんだよね
0216nobodyさん2015/01/20(火) 00:56:53.90ID:???
>>215
俺も得意ではないけど頭の体操がてらやってみては

ただ実際には4/31は?とか閏年じゃ無い年の02/29は?とか言う問題が出てくるから
正規表現でもできるとは思うけど
cakePHPのVaridation::dateと二段構えにするとか
カスタムバリデーションでphpのcheckdateを通すとか工夫は必要になるかも
0217nobodyさん2015/01/20(火) 13:50:15.77ID:???
お、ひさしぶりにおもしろそうな質問発見!
Validation.php見ればわかるけど日付のチェックは閏年を考慮した正規表現一発でやってるよ
適当に改造してみるとこんな感じ

$separator = '(/)';
$regex['ymd'] = '%^(?:(?:(?:(?:(?:1[6-9]|[2-9]\\d)(?:0[48]|[2468][048]|[13579][26])|(?:(?:16|[2468][048]|[3579][26])00)))' .
$separator . '(?:02\\1(?:29)))|(?:(?:(?:1[6-9]|[2-9]\\d)\\d{2})' .
$separator . '(?:(?:(?:0[13578]|1[02])\\2(?:31))|(?:(?:0[1,3-9]|1[0-2])\\2(29|30))|(?:(?:0[1-9])|(?:1[0-2]))\\2(?:0[1-9]|1\\d|2[0-8]))))$%';

改造ポイント
・セパレータは/しか認めない
・西暦2桁表記をNGに変更
・月の1桁表記をNGに変更
・日の1桁表記をNGに変更

書いといてなんだけど、理解できないようなら素直に文字列分解して
4年は〜100年は〜400年は〜のロジック入れればいいよ
0218nobodyさん2015/01/20(火) 22:12:54.49ID:uK/q/RsU
管理画面を AdminController.php として定義してガリガリコードを
書いているのですが、ソースコードの行数が増えてきて
Eclipseで編集する際にフリーズを感じます。

この様にコードが増えて来た場合には
コントローラ名を分けるしかないのでしょうか?
0219nobodyさん2015/01/20(火) 22:23:48.18ID:???
アクションの数が増えたっていう話なら
機能ないし利用するモデルごとに分ける
プリフィックスルーティングでも使えばいい

メソッド一つ一つが長くなっているなら
コンポーネントやモデルや独自のサービスクラスに処理を移すことを考える
0220nobodyさん2015/01/20(火) 22:51:22.09ID:uK/q/RsU
>アクションの数が増えたっていう話なら
>機能ないし利用するモデルごとに分ける
>プリフィックスルーティングでも使えばいい
こっちの事象です。

プリフィックスルーティングとか初めて聞きました。
こちらを探して試してみます。
0221nobodyさん2015/01/25(日) 13:55:32.77ID:???
eclipseが重いところにルーティングいじっても何も解決しないと思うのは俺だけ?
URLが変わってもいいなら、普通にコントローラ分割すればいいし、
URL変えるわけにはいかないなら、"修正中だけ"別コントローラで作って
完成したら1つに戻せばいい
大きなライブラリを使ってるならeclipseから見えない場所に移動させるとか
コーディング以外にも工夫のしようはあるだろう
0222nobodyさん2015/01/25(日) 18:50:35.80ID:???
プリフィックスルーティングの話は
複数のコントローラに分割した上でhttp://example.com/admin/から始まるURLを使いたかったらってこと
AdminControllerなんて名前をつけてるのはURLの都合だろうと思ってね

eclipseが重くなるほど1つのファイルのソースコードが増えてるってのが本当なら
1つのコントローラに管理画面の全てを詰め込む設計はまずいだろうし
0223nobodyさん2015/01/26(月) 11:10:30.59ID:ZT64LJ1C
以下のページを参考に画像のアップロード機能を試しています。
なぜかファイルをアップロードしようとすると「save」ファンクション
が認識されずにエラーになってしまいます。

http://www.tailtension.com/cakephp/1512/

【エラーの出るコントローラの中のコード】
//画像の保存
if($this->Post->save($this->request->data))
⇒ここでエラー

【エラー内容】
Fatal error: Call to a member function save() on a non-object in

【捕捉】
コントローラ名は、 TestController.phpで
定義したアクション名は、 update_image です。
0224nobodyさん2015/01/26(月) 13:32:11.28ID:???
>>223
CakeというよりPHPのエラー通りだと思うけど

そのコントローラでPostモデル呼んでないだけじゃない?
0225nobodyさん2015/01/26(月) 18:47:51.81ID:/y+cf3Fd
cake2.5.8でプロシージャをコールし、out変数を受け取りたいんだけど、
query使ってバインド変数で受け取れますか?

Oracleでやったことのある方がいたら教えていただきたく……
Oracle以外でも、ヒントになるやもしれませんので、教えてくださったら助かります

なんでOracleなのにcakeにしてしまったのか……
0226nobodyさん2015/01/26(月) 20:09:16.40ID:OoDGdBhC
>>224
サンクス

結局プレーンなPHPを使ってアップローダを作る事にしました。
0227nobodyさん2015/01/29(木) 00:13:39.62ID:rYg0zKsM
設計について相談です。
会員登録ページやログインページのURLが
/users/add
/users/login
だとします。

会員情報の変更は、会員専用ページにログインして行えるとします。
その場合、会員情報の変更はどういうURLが適切なんでしょうか?

通常は/users/editだと思いますが、少し違和感があります。(ログイン中に操作するので)
mypagesを作ってプラグイン化して/mypages/users/editみたいにする事も出来るでしょうが、
その場合は、会員用のコントローラー(UsersController.php)がだぶる気がします。

ログイン前のページ・ログイン後のページと分ける設計の場合、
どういうコントローラーとアクション構成にすれば良いと思いますか?
0228nobodyさん2015/01/29(木) 20:58:50.89ID:???
2.xでSQLServerで使用している方いますか?

NULL許可、デフォルトNULLと設定したカラムでデータを省略してinsertした際の
挙動で困っております(当方2.6.1)。

CREATE TABLE [dbo].[items] (
[id] int NOT NULL IDENTITY(1,1) ,
[name] nvarchar(200) NOT NULL DEFAULT (N'') ,
[type1] int NOT DEFAULT ((0)) ,
[type2] int NULL DEFAULT NULL ,
PRIMARY KEY ([id])
)

こんな感じのテーブルがあったとして、
$data['Item']['name'] = 'test';
$this->create();
$this->save($data);
とした場合、MySQLだとtype1,type2ともにDBに設定したデフォルト値でInsertが行われます。
SQLServerの場合、「Conversion failed when converting the varchar value 'NULL' to data type int.」
という理由でエラーとなります。
発行されるSQL文で、SQLServerの場合はNULLをシングルコーテーションで囲む必要が無いのに
囲んでしまっているというのが原因のように見えますが、これを回避する方法はありますでしょうか?
0229nobodyさん2015/01/31(土) 21:52:23.62ID:r0T1vu8n
バリデーションについてです。
バリデーションエラー時のメッセージにフォーム入力の値を使いたいのでですが
以下$valueの部分はどのように書けばいいのでしょうか?

public $validate = array(
'name' => array(
'isUnique' => array(
'rule' => array('isUnique'),
'message' => $value . 'は挿入済みです。',
'required' => true,
)
)
);
0230nobodyさん2015/02/02(月) 22:50:58.85ID:???
>>229
そういうのは出来ない。view側で分岐すべし
0231nobodyさん2015/02/03(火) 15:50:31.15ID:???
>>229
コールバックbeforeValidateで処理するか、
独自のバリデーションメソッド作るか、お好きな方で。
02322292015/02/04(水) 18:25:08.07ID:???
>>230
>>231

ありがとう。
ビューで$this->validationErrors['モデル名']のループまわすことで対応しました。
0233nobodyさん2015/02/04(水) 22:31:45.65ID:HkYqZDdt
現在、cakePHPで入力内容を保存する際にどうすれば良いか悩んでいます。
普通の文字は問題無いのですが

「"」や「>」はサニタイズしてDBに保存するのか
それとも、エスケープしてDBに保存するのか


どちらが一般的なのでしょうか?
0234nobodyさん2015/02/04(水) 23:47:57.07ID:???
>>233
HTMLエスケープのことを言ってるなら
HTML出力時にエスケープするのが定石
DB保存時にHTMLエスケープしたりはしない
0235nobodyさん2015/02/04(水) 23:58:09.18ID:???
入力内容をHTMLタグを含まないテキストとして出力する場合はそのまま保存して出力時にエスケープするべき
入力時のチェック・処理だけだとその後の処理によってスクリプトの文字列が生成される可能性があるので根本的な対策にならない
入力値サニタイジング後の値を逆手に取るセカンドオーダー攻撃なんてものもある

HTMLタグを許可する場合に根本的な対策をするには構文解析して必要な要素を抜き出す必要がある

https://www.ipa.go.jp/security/vuln/websecurity.html
ここにIPAが出してる安全なウェブサイトの作り方というPDF資料がある
クロスサイトスクリプティングの項目が参考になる
0236nobodyさん2015/02/05(木) 00:01:18.00ID:???
cakeの作法通りにコーディングしているなら、
そういった処理は特に意識しなくても勝手にやってくれる
嘘だと思うなら、ブログチュートリアルの記事追加で
君の思いつく限りの変な文字を入力して保存、表示をしてみるといい
どんな入力をしようと問題なく動作するはず

自動でやってくれないのは
・DBがEUC-JPなのに入力に�@を使うとかの特殊なケース
・SQLを文字列で直接書いている
・ヘルパーを使わずに変数を出力
こういったときは自分でサニタイズ、エスケープ等が必要になる
0237nobodyさん2015/02/05(木) 00:10:53.62ID:kXXlZufE
>>234 >>235 >>236
皆さん詳しくどうもありがとうございます。

入力 > 確認 > 登録 or 戻る

の処理の一連の流を作っているのですがユーザが 「"」を入力した場合に
文字列が途中で端折られる為に、どうしようか悩んでいました。
0238nobodyさん2015/02/05(木) 00:11:24.20ID:???
ブログチュートリアルも出力時にエスケープしてるな
htmlspecialchars()のラッパーがあるから楽でいいね
http://book.cakephp.org/2.0/ja/getting-started.html#id7
0239nobodyさん2015/02/05(木) 00:13:20.68ID:???
あー、229の内容はちょっと興味があったんだけどもう解決してるのか・・・
$thisを使うためにコンストラクタで$validate定義したら一応うまくいったとだけ言っておく

てきとーに回答のなかったものにも答えておく

>>225
記事内容はMySQLだけど参考になると思う
http://blog.xole.net/article.php?id=711

>>227
正解も間違いもないような話題はリアルのチームメンバーと話し合ったほうがいいと思うよ

>>228
SQLServerは環境がないから試せないけどDBのデフォルト値を設定したくなければ
create()の代わりにclear()を使うといいかも
バージョンが古くてメソッドがない場合はcreate(false)で
0240nobodyさん2015/02/05(木) 00:52:32.89ID:mACTgUNt
$message_hoge に

「彼は"おはよう"と言った」

という文字列が含まれていたとして
確認画面で<span></span>の中に確認メッセージを表示させて

「戻る」が押された場合に、最初の画面のメッセージ入力エリア(textarea)に
ままの「"」が表示された形で

「彼は"おはよう"と言った」

を出すには、�Aを使う事によりうまくいきました。
ここで疑問なのですがそもそも�@と�Aの違いは何なのでしょうか?

�@ Sanitize::clean($message_hoge);
�A h($message_hoge);


うーん、文字列で事象の説明が難しいです。。。
0241nobodyさん2015/02/05(木) 01:06:39.73ID:???
サニタイズとかいう単語フワフワしすぎてるからもう使うのやめたらいいのになってよく思う

h()の実体はhtmlspecialchars()
http://php.net/manual/ja/function.htmlspecialchars.php
https://github.com/cakephp/cakephp/blob/master/lib/Cake/basics.php#L202-L234

Sanitize:クラスはCookbookに説明あり
http://book.cakephp.org/2.0/ja/core-utility-libraries/sanitize.html#Sanitize::clean
0242nobodyさん2015/02/05(木) 01:12:45.87ID:???
ていうか迷うとしたらh()とSanitize::html()だと思うのだけれど
Sanitize::clean()は全く用途が違うメソッドでしょう

http://book.cakephp.org/2.0/ja/core-utility-libraries/sanitize.html#Sanitize::html

>このメソッドは、ユーザが送信したデータをHTMLの中に表示する準備をします。
>これは、ユーザがレイアウトを壊したり画像やスクリプトを挿入することを防ぐ上で特に便利な機能です。
>もし「$remove」オプションを true にセットした場合、データに含まれるHTMLのタグ等は全て削除されます。
>false にセットした場合は HTML エンティティとして表示されます。:
>文字をエスケープすることはエラーの可能性が低く、知られていない新しいタイプの攻撃に対して強いので、文字を取り除くよりもよい方法です。
0243nobodyさん2015/02/05(木) 01:26:53.54ID:???
というか、みんなViewでの出力時は<?php echo h($data); ?> みたいにしてるの?
echoするときにh()も書くなら、いっその事、DBに保存する前にサニタイズした方が良いと思うんだが。
beforeSave()で一括サニタイズできるし。それにエスケープさせたくない場合は復元すればいいだけだし。
0244nobodyさん2015/02/05(木) 01:30:01.34ID:???
また馬鹿が増えた……
0245nobodyさん2015/02/05(木) 01:34:06.94ID:???
サニタイズ脳の恐怖
0246nobodyさん2015/02/05(木) 01:34:15.37ID:???
”また”って事は最低二人の馬鹿がいるわけだな
0247nobodyさん2015/02/05(木) 01:54:17.98ID:???
{{ data }}
0248nobodyさん2015/02/05(木) 10:48:48.93ID:???
エスケープは必要なときにかけるのが基本だぞ
DBのデータをCSV出力したいとき、逆変換するのか
DBに入れないデータを表示するときは、表示のときにエスケープするのか

デートの前、家から出るときにコンドームしてるようなもんだぞ
途中でトイレいくときどうするんだ
やる前にまたゴムするのか、2重になっちゃうぞ
ってこと
0249nobodyさん2015/02/05(木) 11:04:33.13ID:MaFLMZhc
>>248
分かり易い!サンキュー

取り敢えず、 h() で要件を満たせました。

anonymosuに狙われたら一発アウトそうなセキュリティだけどw
0250nobodyさん2015/02/05(木) 17:00:36.25ID:???
2重コンドームワロタw
0251nobodyさん2015/02/05(木) 18:27:25.06ID:???
>>248
いつ生でしても良いようにピル飲んだらいいじゃない。

ってな感覚で事前エスケープしておくのは駄目ですか?
0252nobodyさん2015/02/05(木) 19:14:43.36ID:???
>>251
その辺は過去にさんざん議論されてて、結局アウトプットのときに
対処するのがベストプラクティスだねって結論が出てるんだよ。
0253nobodyさん2015/02/05(木) 20:06:21.10ID:???
>>252
でも、うっかり忘れて妊娠しちゃう可能性もあるよ!
0254nobodyさん2015/02/06(金) 00:02:00.29ID:???
わかったわかった
挿入直前自動コンドーム装着機能を持つ
テンプレートエンジンを使えばいいだろ
0255nobodyさん2015/02/06(金) 02:02:30.97ID:???
そしたら口に入れようとしたときもゴムがついて不便だよ
0256nobodyさん2015/02/06(金) 09:13:12.13ID:???
口からでも性病感染するから付けとけよ
0257nobodyさん2015/02/06(金) 21:09:55.08ID:XFfNnVZS
パイプカットすれば?
0258nobodyさん2015/02/07(土) 06:03:05.10ID:???
なんのスレだよ
0259nobodyさん2015/02/07(土) 14:20:33.66ID:???
セーフセックスでしょ?
0260nobodyさん2015/02/12(木) 19:19:14.90ID:+z/qvGfu
cakePHPで以下の様に検索ワードが複数あったとしても
自動で or and 検索する事は出来ますか?

参考になるサイトがあれば教えてください。

name = 'A' or name = 'B'

name = 'A' and name = 'B'
0261nobodyさん2015/02/13(金) 09:25:45.69ID:???
>>260
サーチプラグインで検索
0262nobodyさん2015/02/13(金) 11:24:53.34ID:???
>>259
相手がいないんだがこのスレに女の人いる?
Cake合コンとかできないかね
0263nobodyさん2015/02/13(金) 12:47:36.01ID:trE+wwbV
>>261
cakePHPオリジナルでは出来ないですか?
0264nobodyさん2015/02/13(金) 13:27:08.47ID:???
公式ドキュメントくらい読まな
http://book.cakephp.org/2.0/ja/models/retrieving-your-data.html#id5

あと、
name = 'A' and name = 'B'
は常にfalse
0265nobodyさん2015/02/13(金) 16:25:24.50ID:???
>>262
俺女だけどしても良いわよ。
0266nobodyさん2015/02/13(金) 20:17:11.72ID:hnonnNdg
>>264
OK
0267nobodyさん2015/02/14(土) 12:22:29.76ID:riWWWAwO
ユーザーテーブル(users)の設計で相談です。cakephp2系です。
ログインする時、「ユーザー名+パスワード」と「メールアドレス+パスワード」の2パターンが主に使われると思います。
管理人は前者の方法でログインし、一般ユーザーは後者でログインします。

usersテーブルが
id|username|password|email|role|created|modified
だとして、ユーザー名を使わないログインの場合は単純にusernameをNULLにして登録すれば良いんですかね?
それか、usernameにemailの値を代入するべきですかね?
でもその場合、文字数制限のバリデーションエラーが起きる気がします。
(それはroleの分類で回避すればいいことですが)

それか、usersテーブルひとつにまとめるのではなく、分けるべきでしょうか。
どのようにするのが良いかご意見お願いします。
0268nobodyさん2015/02/14(土) 12:58:10.84ID:???
>>267
ACLとかの権限関係をきっちり作るなら
あえて管理人だけ特別扱いする必要は無いのでは
02692672015/02/14(土) 14:04:25.83ID:???
>>268
ACLできっちりじゃなくて、単純にログイン方法を分けたいだけなんです。
0270nobodyさん2015/02/14(土) 17:22:20.07ID:???
>>269
俺ならメールアドレスパスワードに統一。
別に管理人ログインフォーム作成。
管理人フォームにはユーザー名とパスワード。
って感じにする。
02712672015/02/14(土) 17:33:06.70ID:???
>>270
はい。自分もそのような画面設計なのですが、>>267でも質問しました通り、
テーブルをどういう構造にしたらいいか教えてほしいと思いまして・・。
0272nobodyさん2015/02/14(土) 18:20:44.22ID:???
>>271
ヌルでいいよ。
名前のところにメールアドレスなんて入ってたら
次触る人がナンジャコリヤァアってなる。
02732672015/02/14(土) 20:15:38.73ID:???
>>272
分かりました。ではテーブル設計自体は問題無さそうですね。ありがとうございます
0274nobodyさん2015/02/14(土) 21:07:46.13ID:???
こいつのテーブル もうヌルヌルだぜ
■ このスレッドは過去ログ倉庫に格納されています