【PHP】フレームワーク CakePHP 19ホール目【v3.3】 [無断転載禁止]©2ch.net
>>293 サブクエリー内外で カラムが「*」の上、WHEREもJOINも無い エスパー推測で以下のよーなSQLを使いたい、と勝手に解釈する SELECT col1,col2 FROM (SELECT col1,col2,col3 FROM TableA WHERE col1=5); これと似た構造をCakePHP3のクエリビルダで書けるには書けるが、 「遅延実行」という仕組みがある為、生成されるSQLは大体こうなる SELECT col1,col2 FROM TableA WHERE col1=5; あと、MySQLとMariaDBでは1回のSQLで使えるインデックスは1つだから サブクエリーを多用すると遅くなる メンテナンス性が高まる、とかいうメリットを考えてるかもしれんが、 速度を改善したくなったり、見やすいコードを書きたくなったりする時期が来た頃には手遅れやぞ? >>299 クエリが変わってるんですけど・・・ あとたったこれだけのサブクエリでレスポンスが遅くなるとは思えないんですけど・・・ >>302 「遅延実行の仕組みで」って書いてあるのは無視か? SQLが短いのは、クエリビルダ使用前と使用後の違いを目立たせるため 実務なら普通に1行で書く $hoge=$this->TableAs->find()->select(['col1','col2'])->where(['col1'=>5]); (TableAがTableAs になってる、とか言い出すアホはいないと信じたい) で、2重構造にするなら思いつくだけでも3つ以上ある 1 VIEW を使う 2 Modelにサブクエリ風のfunction書く 3 ModelにbyHoge(Query,$options=[])を用意してControllerからfindbyhogeで呼ぶ 4 Cpntroller内でクエリビルダを2回使う TableAが定義されてないのに、これ全部例示する気にはならんわ ちんぺい @chinpei215 先日の RequestHandler に起因する脆弱性の公式アナウンスがありました。また非公式ですが私の方で翻訳を行っています。 https://mbstring.com/news/potential-information-disclosure-in-application-skeleton/ 14:06 - 2017年12月10日 35で指摘した本人だけど、AppControllerのbeforeRenderから $this->set('_serialize', true); を削除する対応よりは、 _serialize変数が宣言されていなければ $this->set('_serialize', []); を設定するという対応のほうが良いと思うんだが。 RequestHandlerはviewの切り替え以外でも使われるわけで、RequestHandlerを 使うなという対応よりは、使われる前提での対応のほうが適切かと思う。 というか$this->set('_serialize', true)はクソ仕様。 public function beforeRender(Event $event) { $return = parent::beforeRender($event); if (!array_key_exists('_serialize', $this->viewVars) && in_array($this->response->type(), ['application/json', 'application/xml']) ) { $this->set('_serialize', []); } return $return; } >>304 ありがとうございます 4番ってどうやるのか教えていただけると助かります バージョン1.3です ページネーションのメタタグ作りたいんだけど、 ページネーションヘルパーから次のページのURLを絶対パスで引数付きで取得する方法ってありませんか? コントローラーでベタ書きして渡せば出来ないことはないんだけど、スマートな書き方ってありませんか? >>308 よりによってそれかよ まあ、需要があるなら書くが・・・ 1つめのクエリー $hoge=$this->TableAs->find()->select(['col1','col2','col3'])->where(['col1'=>5]); 2つめのクエリー $fuge=$hoge->select(['col1','col2']); controller内でデータとして使うときは、 全件取得:$koge=$fuge->all(); 最初の一件だけ取得:$koge=$fuge->first(); で実体化する あとは、debug($koge); で中身を表示・確認しながら好きなように使う それと、 debug($fuge);でどんなクエリーが出来るてるかみたほうが良い 何だかんだでアドベントカレンダー全部埋まってるよね テーブルAとテーブルBは互いにhoge_idというカラムを持っていて hasManyで紐付けたいんですが hoge_idはどちらのテーブルでも主キーではありません この場合アソシエーションではどのようにくっつければいいのでしょうか? 誰でも簡単にネットで稼げる方法など 参考までに、 ⇒ 『半藤のブブイウイウレレ』 というサイトで見ることができます。 グーグル検索⇒『半藤のブブイウイウレレ』 AJ01PNMU9X 2系を使用しています。コントローラー内でのビューの取得について相談です。 コントローラーで function test() { $this->render('test'); $body = $this->response->body(); } とすれば取得できるのですが、 取得した文字列の一部を加工して出力しようと、 echo str_replace('タイトル', 'TITLE', $body); しても二重に出力されてしまいます。 加工後のデータだけ出力するにはどうすれば良いのでしょうか? renderはデフォルトで出力もする $this->autoRenderあたりでオフれるはず すみません サーバーに全ファイルをffftpでアップするとき vendorファイルの中が多すぎて止まってしまうんですが どうすれば良いでしょうか? いまどきFTPなんて欠陥プロトコルとそのクライアント使うなってことです まあそれしか使わせて貰えないサーバーもあるだろよ 無料レンサバとかさ >>324 Oven使ってインストールするってのはどう? cookbookにも掲載されている方法です >>327 telnetすら使えない場合解凍のスクリプトがいるけどな そのライブラリもなければお手上げ .poファイルを作って、/app/Local/eng/LC_MESSAGES に配置すれば多言語化(翻訳)が可能になります。 その理解が最低限あるとして相談です。 フォームヘルパーで選択肢を作るとき $this->Form->input('hobby', array('options' => array('cooking', 'sports'))); な感じで書くと思います。 この選択肢(option)の部分をpoファイルに記述しても翻訳されません。 別に配列を用意して切り替えるしか無いのでしょうか? >>333 $this->Form->input('hobby', array('options' => array(__('cooking'), __('sports')))); は試したか? >>334 返事が遅くなってすみません。 それは試したのですが、配列すべてに__()を付けるのもどうかと思いまして・・・。 そういう方法しかないと言うなら納得します。もし他に方法があれば教えてください。 >>336 foreachでムリクリ「__()」くっつける方法とか、 対訳テーブルをdb上に作っといて「__d('cooking','料理') , __d('sports','スポーツ')」って出力するとか いまいちパッとしない 後者についてはdb使うから、foreachだけより遅くなるかも とりあえず前者だけ書いとく ふつうはTemplateに直書きせずに Controller側 $ops=array(); $ops[]='cooking'; $ops[]='sports'; $this->set('ops',$ops); Template側 echo $this->Form->input('hobby',$opt); とかやるでしょ? そのときにこーゆー無茶をやる >>336 無茶の続き Controller側 $ops=array(); $ops[]='cooking'; $ops[]='sports'; //ここまで上と同じ $op1=array(); //新しい配列 foreach($ops as $key=>$op){ //$key に添え字、$opに内容が入る $op1[$key]='__('.$op.')'; //文字列連結 } $this->set('ops',$op1); Template側(上と同じ) echo $this->Form->input('hobby',$opt); foreachは、配列が大きいと実行時負荷が半端じゃ無いけど、10ヶ前後ならナシでもないはず。 >>336 文字列連結はこうかもしれん $op1[$key]='__('.'''..$op..'''.')'; シングルクオーテーションの扱いも面倒だな もっとスマートなやり方が考案できたら良いんだが、俺にはこれが精一杯 あとはqiita辺りをROMるほうがが吉かと >>339 あああ、また間違えた、書くならこっちだ $op1[$key]='__('.'''.$op.'''.')'; $keyじゃないな。たぶんこれでいけると思う Controller側 $ops=array(); //ここからoption内容作成 $ops[]='cooking'; $ops[]='sports'; //ここまでoption内容作成 $op1=array(); //新しい配列 foreach($ops as $op){ $op1[$op]='__('.'''.$op.'''.')'; //文字列連結 } $this->set('ops',$op1); Template側 echo $this->Form->input('hobby',$opt); $optの内容:['cooking'=>__('cooking'),'sports'=>__('sports')] やりすぎ防犯パトロール、特定人物を尾行監視 2009年3月19日19時7分配信 ツカサネット新聞 http://headlines.yahoo.co.jp/hl?a=20090319-00000026-tsuka-soci この記事で問題になった通称やりすぎ防パトは、創価学会と警察署が引き起こしていたようです 掻い摘んで説明すると ・創価学会は、町内会や老人会、PTA、商店会等の住民組織に関し、学会員が役員になるよう積極的に働きかける運動を 90年代末から開始し、結果、多くの住民組織で役員が学会員という状況が生まれた ・防犯パトロールの担い手は地域の住民と住民組織で、防犯活動に関する会議や協議会には、住民組織の代表に役員が出席する為 防犯活動や防パトに、創価学会が間接的に影響力を行使可能となった ・防パトは住民が行う為、住民が不審者や要注意人物にでっち上げられるトラブルが起きていたが 創価学会はその緩さに目をつけ、住民組織を握っている状況を利用し、嫌がらせ対象者を不審者や要注意人物にでっち上げ 防パトに尾行や監視、付き纏いをさせるようになった ・防パトは地元警察署との緊密な連携により行われる為、創価学会は警察署幹部を懐柔して取り込んでしまい 不審者にでっち上げた住民への嫌がらせに署幹部を経由して警察署を加担させるようになった ・主に当該警察署勤務と考えられる創価学会員警察官を動かし、恐らく非番の日に、職権自体ないにもかかわらず 私服警官を偽装させて管轄内を歩いて回らせ、防犯協力をお願いしますと住民に協力を求めて回り 防犯とは名ばかりの、単なる嫌がらせを住民らに行わせた(防犯協力と称し依頼して回っていた警察官らの正体は恐らく所轄勤務の学会員警察官) ※これに加えて防犯要員が同様のお願いをして回る ・こうして防犯パトロールを悪用し、住民を欺いて嫌がらせをさせつつ、創価学会自体も会員らを動員し、組織的な嫌がらせを連動して行った つまり警察署に勤務する学会員警察官、警察署幹部、創価学会が通称やりすぎ防犯パトロールの黒幕 詳細は下記スレをご覧下さい やりすぎ防犯パトロールは創価学会と警察署の仕業だった https://rio2016.5ch.net/test/read.cgi/bouhan/1516500769/ Cake2.10からPHPUnitの5が使えるようになったって話だけど まともに動かないまま放置されてる 2系ももう終わりなんですかね >>344 バグフィックスしてくれるだけで十分だわ。当分使えるし ☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の 両院で、改憲議員が3分の2を超えております。 『憲法改正国民投票法』、でググってみてください。国会の発議は すでに可能です。平和は勝ち取るものです。お願い致します。☆☆ CakeFest 2018 のチケットが販売中ですよ 今年は6月14日から17日まで、米テネシー州ナッシュビルで開催されます https://cakefest.org/ オフィスソフトしか使わない、webプログラミングの門外漢から質問です。お願いします。 CakePHP、あるいはLaravelという言語(この二つは厳密には言語ではなく、PHPという言語を 応用したプログラミングの仕組みをいうらしいですね)のいずれかについて、5から8人くらいの、 その能力を審査しなくてはいけなくなりました。 「本当に仕事としてそのプログラムを扱っていたことがあるかどうか、入門書読んで少し自分で やってみたことがあるというレベルを超えているかどうか」 ↑ こういう基準をちゃんとクリアしてるのかどうかを見極めたいです。 1週間3万円の作業料(時間をとっていただく分の報酬)で、何かの課題を出して提出してもらう 形にしたいのですが、何かいい、典型的なダミーシステムってないでしょうか?実際にネットにアップして それを審査するのではなく、別の課の人のPCのxampp(社内のネット?)で実行してみて出来をみると いう形式になります。 これまたど素人の上司は、「よくわからんから、ダミーショッピングサイトでいいんじゃね?」などと 言っていますが。。 ↑ わかりにくい質問ですみません。 CakePHPかLaravelについて「その人が中級者以上かどうか」を審査するのに、 ちょうどいい課題のアイデアを教えてください、ということです。 一週間以内、3万円でやってもらう程度の課題です。 >>349 今までに作ったものを見せろ、で良いと思う。 一週間三万円で頼んだところで、信じられるものが出てくるわけがない。 >>348 どんな要員が欲しいのか書いてないので解らんが、一週間なら 管理者権限、一般権限を分けたアンケートフォームあたりでお茶を濁すぐらい。それでもちょいと仕様説明は長くなる 以下、「ぼくがかんがえたいっしゅうかんでつくるぴいえっちぴい」の仕様 A 管理者権限と一般権限を分け、ログイン後は別の画面を表示する B 管理権限ユーザー: アンケート内容を決めてDBに保存、 アンケート集計結果を閲覧 C 一般権限ユーザー:自分のユーザー名でログインしてアンケートに答え、結果をDBに保存 D アンケートは、テキストボックス1つ、チェックボックス1組、ラジオボタン1組、ドロップダウンリスト1個に納めるものとする E 「アンケート内容」は「4月1日から14日」「4月15日から28日」等の期間をつけ、期間毎に別の質問が出来るものとする ==== 1管理権限ユーザー (1)ユーザー管理 管理権限ユーザーの追加、変更、削除 一般権限ユーザーの追加、変更、削除 (2)アンケート内容入力 アンケートのタイトル アンケートの期間 テキストボックスで答えて欲しい質問 チェックボックスで答えて欲しい質問と選択肢 ラジオボタンでで答えて欲しい質問と選択肢 ドロップダウンリストで答えて欲しい質問と選択肢 (3)アンケート結果閲覧 各アンケートに答えた人数 各アンケートの集計結果(単純な表組ぐらい) 個々のアンケート内容閲覧(編集禁止) 2一般権限ユーザー (1)ユーザー管理 自分のパスワード変更 (2)アンケート内容入力 閲覧日時に合ったアンケート質問画面が表示され、回答を入力 読んだら解るだろうけど、これで測れるのは、「作業者としての技量」 だけなので、DB設計センスやら仕様を読みとる能力やらは全く判明しない。 「本当に仕事としてそのプログラムを扱っていたことがあるか」 が知りたいなら、>>350 が有用 多分、一週間で能力を測れと「上の上の方の人」に言われたんだろうが、 測る側も 、フレームワークの違い、権限分離の方法の違い程度の知識と Apache,nginx,postfixを入れた仮想マシンを提供する人の用意ぐらいは要るとおもうぞ もう一つ忘れてた PHPのバージョン選びも注意な PHP5.4は、CentOS7.xかRedHat7.xを使うなら、2024年あたりまでセキュリティーパッチは出る PHP5.5とPHP5.6はお勧めしない このあたりはQIITAの人がまとめてくれているので、この人に感謝しながら読むと良い ttps://qiita.com/bezeklik/items/72d1ff8393f66673e2bc そこまでやるならFWのバージョンを指定しないと意味がない 外注業者を選定したくてやってるんなら 一週間3万円のフィルターでまともなところは全部落ちる >>357 成果無しでも1週間で3万円、何が寄って来るやら… >>354 そうなるわなw 無意識にPHP7.xとCakePHP3.5.xを想定してたわ Larabelはチュートリアルビデオさえ見てない Cake1.3をCake3.5へ移植中でお腹いっぱい Larabelなら5.6とPHP7.xがよいのかな? >>348 まだ見てるか? >>358 も俺だ(名前欄参照) 他でも情報集めてるんだろうが、上のほうの人に諦めていただくように お願いするのが吉だと思うぞ? FWが決まってない(&分かってない)のに人集め、とか冒険しすぎ >>348 です。 みなさま、お騒がせして申し訳ありませんでした。 最初、>>351 さんを見てすごくいいと喜びましたが、つづくレス>>352-353 が まったく何のことかわからず、>>350 にするしかないと、今朝までにそう決意しました。 しかし、その後のレスを見ても、そもそも何をどう審査していいのかすらわからないのが 怖くなって、あれこれ悩みました。 結局、うちの上司に心を入れ替えてもらい、システム課長に対してこれまでの無礼を詫び 頭を下げてもらった結果、システム課のみなさんに審査全般おまかせできることになりました。 私は、355さんの受け売りで「そもそもFWのパージョンを指定しないと意味ないですよね」と言って 「お、きみ、詳しいんだね」とシステムの人に褒められたのだけがよかったです。 ありがとうございました。 >>360 おめでとう これで「ちょっと判る奴」という烙印ゲットだw そのような道標を置いた覚えは無いが、仲裁能力を磨いておくようにな cake2系で、error.logにfavicon関係のログが定期的に記録されるのですが、 これってfaviconを指定しないと消えないんですかね? faviconが設置しなくてもエラーにならない方法があれば教えてください 作るのがめんどくさいなら、 ttp://antifavicon.com とか使ってとりあえず置くでも良いと思うよ。 ログイン画面すら表示に1秒くらいかかる 客のコードのせいかと思ってたら、Cake本家のページもそんなもんだな 海外サーバってだけでも体感に影響するから、cakeが一概に遅いって訳じゃない debugがtrueになってるとかいうオチだけは勘弁 ん、おまえらの環境は早いの? それとも1秒は耐えられる速度ってこと? debugは例外出た時にしかtrueにしねえな >>372 普通に速いぞ。 作りが悪いんじゃないか? 改善の余地は十分にあるってことか、さんくす Cake3.5.5/PHP7.0/apache2.4/mysql5.7 レスポンスは開発環境のWindowsも本番用のAzureLinuxも大差無し 1秒が耐えられないって普段どんだけ素早く動いて生活してるの >>375 mysql系統だと、1つのSQLにつき1つのIndexしか使えない 処理が遅い時は、indexが上手く機能してない場合がある 処理が遅い所でdebugkitからSQLを拾って、処理時間が長いものを探す で、そのSQLに対応したindexを作ってみると改善する 俺の環境では、このパターンが多い ま、サブクエリが発生してたらクエリビルダーを書き直すという泥縄だが 環境はこんな感じ CentOS7.1,Apache2.4,PHP7.2,mariadb10.0(innodb) 開発環境:Windows7 + VirtualBox5.1.5 本番環境:Amazon EC2 >>376 開発中でログインユーザー1人だけなら、レスポンス1秒は長すぎる その時点で、開発者が「1秒なら待てる」とか言い出したら問題有り アクセス数の集中加減次第で、内部エラー(DBタイムアウト)になりかねん >>377 書き忘れた CakePHP3.5.12 4はいつ出てくるんだろう? 個人的には永久に出てきてほしくないけど。 ところでなぜ日本だけCake人気あるのでしょう?日本製でもないのに 日本人は英語のドキュメント読めないから、いつまでも古い技術にこだわるため >>383 作り替えを極端に嫌うから、必然的にサポートが長いのを好むんじゃないかな? 俺のなかではcakeから乗り換えるならdjango一択。 Cake3のValidationで質問です。 int型の項目にtextフォームからデータを登録したいのですが、「a」と入力した際に 「This field cannot be left empty」というメッセージが表示されます。 入力が無視されているようなのですが、この無視する挙動を無効にする方法はありますか? 下記のような実装なんですが、「a」と入力したら「Invalid Data'」と表示されることを期待してます。 CREATE TABLE `hoge` ( `id` int(11) NOT NULL AUTO_INCREMENT, `sort` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ; public function validationDefault(Validator $validator) { $validator ->requirePresence('sort', false) ->notEmpty('sort') ->add('sort',[ 'naturalNumber'=>[ 'rule'=>['naturalNumber'], 'message'=>'Invalid Data', ] ]); return $validator; } >>385 第2引数「true」がぬけてるからでは? ->add('sort',[ 'naturalNumber'=>[ 'rule' => ['naturalNumber', true], 'message'=>'Invalid Data', ] ] ); >>384 日本社会は、前例主義だからなあ 実績のある〜〜というのが大好きだもんな >>386 引数trueつけても同様でした(省略の場合はfalseが初期値でした)。 コードを変えずに、DB定義でsortをint→varcharに変えると意図した動作になるんですよね。 validationの際にDB定義を見ているとしか思えない…。どうにかしてこの挙動を無効にしたい…。 >>388 今はlaravelじゃないかなあ ただ日本では実際にどれくらい使われてるのかは分からないけど >>387 でも急にフレームワークが無くなるってことも実際に起きてるから慎重にはなる Silexなんかは開発終了宣言しちゃってec-cubeどうなるんだって状態だし 昨日もSilex採用したら1年で終了というブログも見かけた 俺もそのブログ見てSilexなんて知ったんだが 知名度低いものは使っちゃだめなんだなやはり ec-cubeってsilexからsymfonyになったんだな まあそうなるか え?Silex終了か。 以前はよく使ってたな。今はFlaskばっかりでやってるけど。 PHPの環境を手っ取り早く試すのにはいいし、わざわざSlimに移行するのもめんどくさいな。 cakeもsymfony使ってるし、laravelもそうであるように、symfony+αっていうフレームワークを選ぶのがPHPの流れだと思う。 解決しました。 どうしてもvalidationを無効にはできなかったので、結局schemaの設定で型をstringにして逃げました。 read.cgi ver 07.5.5 2024/06/08 Walang Kapalit ★ | Donguri System Team 5ちゃんねる