トップページ⇒php
981コメント296KB

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

■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん2014/03/01(土) 17:03:24.57ID:8AJ9GD6E
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/1378659370/
0450nobodyさん2014/05/12(月) 14:37:04.67ID:???
>>447
>>448
ありがとうございます!
AppShellなるクラスが用意されていたのですね。知りませんでした。
さっそく試してみます。
04514472014/05/12(月) 14:41:43.59ID:???
TeraTerm ってことは Windows か。
わかってるだろうけどコマンドのディレクトリセパレータは / じゃなくて \ な。
0452nobodyさん2014/05/12(月) 15:16:40.76ID:???
>>447
>>448

verify()をShellから実行した結果、180超のエラーが出力されました。
特に多いのは index missingというやつです。
recover() で回復できますでしょうか?
0453nobodyさん2014/05/12(月) 15:22:02.02ID:???
>>452
以前自分も同じようになったときは、
recover()で上手く言った場合とそうでない場合とがあった。

上手く行かなかったときは時間もなかったんで、
独自でスクリプト書いてで lft と rght を振り直した。

すまんが深く探ってないんで、それ以上詳しいことはよく分からん。
一度やってみろとしか言えない。
0454nobodyさん2014/05/12(月) 15:24:38.22ID:???
あと、verify() でエラーが出たってことは
これからも同じ問題が発生するおそれがあるんで、
更新処理を全て点検したほうがいいな。

テストを良く書けているかどうかで、こういうときに大きく差が出る。
0455nobodyさん2014/05/12(月) 15:27:51.20ID:???
Treeビヘイビアを使ってカテゴリ管理って難しいよね。
不特定多数のカテゴリを扱うとかなったら、
今回のような問題が起きてしまう可能性があるし
0456nobodyさん2014/05/12(月) 15:28:47.24ID:???
連投すまんが、今の状態だと recover 走らせる時もめちゃくちゃ時間かかるはずだから、
必ず Shell から実行すること。
更新中にタイムアウトなんかしたら(特にMySQLのMyISAMなどは)やっかいなことになる。
0457nobodyさん2014/05/12(月) 15:35:37.85ID:???
>>455
入れ子集合モデルは更新コストが激高だからな。
場合に応じて使い分けるしか無いと思われ。
0458nobodyさん2014/05/12(月) 15:38:35.35ID:???
>>453-456

アドバイスありがとうございます。
>これからも同じ問題が発生するおそれがあるんで、
お客が不正に行ったデータのInsertなどが原因だった可能性もありますが、
プログラムのほうも確認しておきます。

recover()もShellから実行しました。案外完了が早かったように思います。
今2度目のverify()です。
0459nobodyさん2014/05/12(月) 16:13:23.60ID:???
>>453
verify()でtrueが返りました!
moveUp()をあるノードで実行して結果をdebug文で出すとtrueが返りました。
しかし、treeには何の変化もなし!ノードの位置は一切変わっていません。
なぜなのでしょうか・・・。
04604592014/05/12(月) 16:28:51.15ID:???
連投で申し訳ありませんが、moveUp(), moveDonw()の仕様を根本的に勘違いしていました。

bookを読むと 同じ枝の中で順番を上に上げるのがmoveUp()なのですね。

僕はそもそもmoveUp()したノードは「一つ階層を上がって、今までの親ノードと同じ階層に来る」
ということを実現するものなのかと勘違いしておりました。

申し訳ありませんでした。しかしverify, recoverをshellから実行するなどの貴重な情報が得られて
感謝です。
0461nobodyさん2014/05/12(月) 16:30:16.90ID:???
階層を変えるなら parent_id を変更する
0462nobodyさん2014/05/12(月) 16:31:48.27ID:???
>>461
そうですよね。
しかしparent_idを手でいじって、lft, rghtがそのままで良いのかというのが気になる点です。
0463nobodyさん2014/05/12(月) 16:32:41.62ID:???
>>460
ちょっと興味あるんだが、レコード何件あんの?
0464nobodyさん2014/05/12(月) 16:33:45.39ID:???
>>462
>parent_idを手でいじって
ちがーーーう!
TreeBehaviorが効いてるモデルでやるんだよ!!
0465nobodyさん2014/05/12(月) 16:38:21.01ID:???
>>463
3万件超あります。

>>464
もちろん、DBから直接parent_idを変えたりしませんよ。
CakephpのEdit画面(もちろんTreeのモデルのもの)から変えます。
0466nobodyさん2014/05/12(月) 17:32:11.61ID:???
>>463
んん、3万件オーバーでTreeBehaviorか。。。
ブラウザからの更新はちょっとキツイかもな。
0467nobodyさん2014/05/12(月) 17:34:01.92ID:???
>>465
>CakephpのEdit画面(もちろんTreeのモデルのもの)から変えます。

なら問題なく lft, rght 変更してくれる。
っつーか、それがTreeBehaviorの仕事だからな。
0468nobodyさん2014/05/12(月) 17:45:37.30ID:???
改めて思うけど、カテゴリの設計って難しすぎるな
0469nobodyさん2014/05/12(月) 17:54:12.62ID:???
>>466-468

ありがとうございます。
parent_idを変更すると、思っていた階層の移動が完了できました。ご迷惑をおかけしました。

カテゴリはこれからも増えていく可能性があるので、
このままTreeBehaviorを実装していて安全なのかちょっと心配しています。

親子関係を実現するには普通にHABTMでもいいのではないかな、と思いましたが、
設計段階でTreeの採用が決まっていたので、これで作ってしまっています。
データ件数がでかくなった今、非常にデリケートなデータ構造なんだな、と改めて認識しております。
0470nobodyさん2014/05/12(月) 18:14:56.49ID:???
>>468
さらにそれを管理してくのが苦痛。
0471nobodyさん2014/05/12(月) 18:30:07.53ID:???
>>469
親子関係でHABTMってどうやるんだ
0472nobodyさん2014/05/12(月) 19:01:06.74ID:???
>>471
・categories
・articles
・category_articles(中間テーブル)

みたいなテーブルを作る
0473nobodyさん2014/05/12(月) 19:02:02.02ID:???
ごめん。中間テーブルの名前を間違えた。
categories_articlesだったかな。
0474nobodyさん2014/05/12(月) 19:42:05.93ID:???
>>471

Categoryモデルの中に

public $belongsTo = array('Parent' => array('className' => 'Category',));
public $hasMany = array('Children' => array('className' => 'Category'));

と二つ記述するやりかたですかね。
それを最初に思いついたのです。
しかしTreeのほうが上ではないかという意見が出たため、そっちを採用しました。
0475nobodyさん2014/05/12(月) 19:50:22.00ID:???
>>471
だからHABTMじゃないですね。ごめんなさい。
言うならばHas Many and Belongs to Oneでしょうか。
0476nobodyさん2014/05/13(火) 16:37:41.63ID:???
ありゃ、もう2.5.0出たのか。
なんか最近CakePHPのバージョンあがるの早い気がするけど、気のせいか?
0477nobodyさん2014/05/13(火) 16:39:47.73ID:???
>>476
年取っただけだと思う。
時代の流れが早く感じるよな。
0478nobodyさん2014/05/13(火) 16:44:46.95ID:???
2.6も予定されてるのかよ。
さっさと3出して、2は打ち止めでいいだろ。
0479nobodyさん2014/05/13(火) 17:43:09.45ID:???
今のCakeって$usesに書いてあるモデルは実際使われるまで読まれないんだよね?
ということは存在する全モデルを常に書いてもいいってこと?
0480nobodyさん2014/05/13(火) 18:12:50.09ID:???
ぜんぜん良くはねーと思うが、負荷にはならんだろうな
0481nobodyさん2014/05/13(火) 22:34:11.52ID:???
>>479
「今の」ってバージョンいくつからそうなったの?
0482nobodyさん2014/05/13(火) 22:43:15.01ID:???
2.x
0483nobodyさん2014/05/14(水) 00:35:48.56ID:???
サンクス。普段は2系使ってるから特に問題ないな
0484nobodyさん2014/05/14(水) 02:38:22.28ID:???
プログラミングするとき3行毎に動作確認しないと
不安で死ぬやつって俺だけ?
0485nobodyさん2014/05/14(水) 04:51:26.28ID:???
3行は短すぎるが、ちゃんと小さい処理単位でメソッドを分けておけば、
まとめて動作確認してもデバッグしやすいよ。
あとはテストを書け
0486nobodyさん2014/05/14(水) 07:02:10.89ID:???
そんなあなたにテストファースト
0487nobodyさん2014/05/14(水) 10:05:36.21ID:???
ぶっちゃけ、テストの利点が分からないの俺だけ?
0488nobodyさん2014/05/14(水) 10:09:17.84ID:???
さすがに君だけじゃない?
0489nobodyさん2014/05/14(水) 11:29:01.43ID:???
最初のうちは、いまいちわからんかもね。
インターフェースのテストで、mockの使い方がわかってくるようになると、考え方が変わるかも。
0490nobodyさん2014/05/14(水) 12:33:17.82ID:???
>>489
俺も教えて欲しいんだけど
テスト書くのが面倒
テスト自体信用できない
書いてもやっぱり最初から書きたくなる
って思ってしまうんだけどそれでも書いた方がいいと思う?

できるプログラマーの人はみんな書いてるよね。
0491nobodyさん2014/05/14(水) 12:42:45.04ID:???
>>490
結論としては書くべきでFA
そのことがわかるには経験が必要
てことだと思う
0492nobodyさん2014/05/14(水) 12:51:30.16ID:???
サービスが稼動を始めてから、数ヶ月経った後くらいに、
誰かのひどいコードを見つけた時、
テストを書いてあれば・・・と思うよ。
0493nobodyさん2014/05/14(水) 13:38:02.11ID:???
view (.ctp) ファイルのテストってどうやってやるんだろう。
0494nobodyさん2014/05/14(水) 14:02:28.89ID:???
そこまでテストする必要があるのかはよく考えたほうが良いように思えるけど、
やるならSelenium使うんじゃない?
0495nobodyさん2014/05/14(水) 14:08:25.34ID:???
テスト=コードが正しく動作するか確かめる

ではないんだよね?これはブラウザで確認すればいいだけだし、
大体はコード書いた後に実行して確かめているだろ。

具体的にどういう場面でテストが必要になるの?
0496nobodyさん2014/05/14(水) 17:09:00.17ID:???
ユニットテストとユーザテストごっちゃにしている時点でなんだかな。
0497nobodyさん2014/05/14(水) 17:52:25.48ID:???
>>495
> 大体はコード書いた後に実行して確かめているだろ。

一度書き捨てて終わらせられるなら誰も書く訳がない
改修は何度も発生する=確認も同じだけ発生する=クッソ面倒
だから面倒な確認を自動化するためにテストを作るんだ
0498nobodyさん2014/05/14(水) 20:45:44.91ID:???
というよりさ!
まずテストコードってなんなの?
console.log()とは違うの?
0499nobodyさん2014/05/14(水) 21:02:32.76ID:???
お前のテスト(むしろconsoleデバッグ?)
→ 逐一人の手で実行して人間がブラウザやconsoleに表示された値やを見て想定したものかどうか確認する
   自動化できてない
   複数の関数やメソッドが絡むとバグの原因の特定がしづらい

他の皆の意図するテスト(単体テスト)
→ それぞれの関数やメソッドが複数の引数のパターンに対し適切な返り値を返したり
  例外やエラーを吐いたりなど仕様通りの挙動をするかを確かめるコードを書く
  検証する対象が小さいので比較的簡単に書けるし自動化も容易い
  プログラムの小さい単位の動作をあらかじめ保証しておくことで
  後の複数の関数やメソッドが絡むテストの際にもバグの原因の特定がしやすくなる


面倒だから単体テストでググれ
0500nobodyさん2014/05/14(水) 21:19:27.30ID:???
さっぱり意味が分からん
0501nobodyさん2014/05/14(水) 21:51:05.96ID:???
例えば「足し算」ていうメソッドを作成したとする。
これは引数に例えば「1と2を入れると3が返る」というもの。

1「テストを書かないやりかた」

こんな簡単なメソッド、どうやってもミスるわけない。
とりあえず作る。最初に動くか確認する。
動いた・・・終わり

2「テストを書くやりかた」

「1と2を入力すると3が返る」というテストを書く。
開発しながらテストを走らせて正常か確認する。
テストが異常なら、異常がなくなるまでプログラムを修正する。
これをずっと繰り返す。

3「テストを先に書くやり方」

2のテストを先に書く。メソッドは空からスタート。
テストが通るまで開発を行う。
0502nobodyさん2014/05/14(水) 21:56:32.40ID:???
console.logは、phpでいえばvar_dumpとかになるなんだろうが、
使うときにコメントイン/アウトしなきゃいけないし、消し忘れるとそれがそのまま出力されて大変なことになる(センシティブな情報だったら・・・)。
0503nobodyさん2014/05/14(水) 22:52:25.27ID:???
上司がテストケース書いて、部下にそれに合うようなコードを書かせるってのなら良いと思う。

ただcakephp1が2になったりするとテストも書き直しだよね。
結局テスト書いてもそれ以上にプログラムの進歩が速いような気もするんだよね。

ちなみにヤフーとかって10年前くらいにcgiをphpに書き直したみたいなこと聞いたけど、あれ以来書き換えてないのかな。

それとも地道に書き換えまくってるのかな?
0504nobodyさん2014/05/14(水) 23:08:58.07ID:???
>ただcakephp1が2になったりするとテストも書き直しだよね。

いきなりスパン長い話になってね?

ビジネスロジックまで全部変わるわけじゃないんだからテストコードも一部はそのまま使えるでしょ
テストコードまったくなしに書きなおすよりはいくらか書きやすいと思う
0505nobodyさん2014/05/14(水) 23:36:50.08ID:???
>>499の説明で合ってるんだが、何がわからないのかわからない
0506nobodyさん2014/05/14(水) 23:52:50.14ID:???
>>504
ありがとう。そういうメリットもあるんですね。

>>505
わからない人にとっては全くわからないんだよね。テストケースのメリット。


俺、gitもテストケースも使ったことないというか使えないので勉強します。
0507nobodyさん2014/05/15(木) 00:48:57.49ID:???
なんだかんだ言って教えるのなw
0508nobodyさん2014/05/15(木) 01:04:25.59ID:???
経験ないとわからないかもしれんね
愚者は経験に学ぶと言うけど人間なんて全員愚者だから、がんばって経験を積もう
0509nobodyさん2014/05/15(木) 02:16:19.81ID:???
>>495
こういう >>492 時に必要になるんだよ。

例えば1日の区切りが0時じゃなく4時なサービスがあるとしよう。
DateTimeオブジェクトや日時の文字列を受けて、何日かを返すメソッドがあるんだけど、
中身を見たらこりゃひどい実装だなという時、
テストがあれば、中身を書き換えても同じ結果を返す実装にできたとわかりやすい。
0510nobodyさん2014/05/15(木) 03:48:38.98ID:???
お前ら俺が以前テストの質問した時はスルーしたくせに
テストの話題で盛り上がりやがって
0511nobodyさん2014/05/15(木) 04:08:36.66ID:???
>>510
たぶんそれから必死で勉強したんだよ
0512nobodyさん2014/05/15(木) 10:33:38.61ID:???
>>509
>中身を見たらこりゃひどい実装だなという時、
>テストがあれば、中身を書き換えても同じ結果を返す実装にできたとわかりやすい。

ここが想像できないんだよ。中身(モデル?)が酷い実装っていうけど、
前は動いてたんだよな?それを変更する時に「酷い」が分かるんだろ?

なら、テストも書き直しだと思うんだよ。俺も>>503と同じ疑問を持ってる。
Cakeのバージョンアップではなくとも、仕様が変わればテストも変わるでしょ。
0513nobodyさん2014/05/15(木) 10:45:22.44ID:???
0か1で考えてんな
少なくとも単体テストしやすいように設計してれば
仕様を変えた部分の他に影響がないことを保証しやすいんじゃないか


テストが書いてない誰かが作ったソフトウェアを改修する時に
あっち変えたらこっち動かなくなったよみたいな経験ない?
0514nobodyさん2014/05/15(木) 10:52:06.00ID:???
んじゃあ次はgitってなんなのよ?
0515nobodyさん2014/05/15(木) 11:08:32.04ID:???
>>514
俺も思うな。
一人で開発したことしかないからか、
前に戻したくなることなんてまず無い。

毎回、add、commitする手間の方が面倒な気がするけど。

ただ、いつでも何処にでも戻せる安心感ってのは大きいのかもしれない。
dropboxでも戻せるけどどこに戻せば良いのかすらわからない。
0516nobodyさん2014/05/15(木) 11:14:00.56ID:???
>>512
別人だけど、中身ってコードのこと言ってるんだろ。
テストが完璧な仕様を表したものだと仮定すると、
テスト通りに動く限りは、実装コードはいくら変えても構わない、という理屈。
テストコードの方も変える必要がない(というか、変えたら同一の保証ができなくなる)。

もっとも、リファクタリングの過程で、新しいクラスやインターフェースを追加、とかなることが多いから、
その場合は、テストも変えていく必要はあるけど。
0517nobodyさん2014/05/15(木) 11:25:10.47ID:???
バージョン管理してないとかマジか
まあ趣味で小規模のものならそれでもいいのかな…
0518nobodyさん2014/05/15(木) 11:31:50.75ID:???
>>515
一人で開発を数年やってるが仕事でも個人サービスでもgitは重宝してる

過去ログとして何をやったかが残ること。
複数同時に機能開発ができること。
gitなしにはもう生きられない。

テストはControllerのテストは書かない。
それより下位層は書いてる。
自分が書いたコードを忘れたころに重宝してる。
他の機能実装のために、さらに下位層を変更したときに重宝してる。

デプロイツールもなしには生きられんな。
0519nobodyさん2014/05/15(木) 11:48:03.50ID:???
>>517
残念ながら商用で10以上の製品を扱ってるんだ・・。

gitの前にSubversionを勉強したこともあったけど、
バージョン管理の利点があまり思いつかないんだよな。バックアップ以外で。

マイナーアップデートしてそれをgitで管理する程度ならいいだろうけど、
開発してたら頻繁に更新するわけだろ?コード間違えも多々ある。
なのに、どのタイミングでadd、commitするか分からんし、
毎回してたら515が言うように面倒だ。
0520nobodyさん2014/05/15(木) 11:52:50.01ID:???
>>513
例えばこの2ちゃんの掲示板。
名前とメールアドレスと本文入れて投稿すれば掲載される。
この一連の処理が正しく行われるかのテストを書くわけだろ?

で、そこに「画像を追加できる」という機能が加わったとする。
コントローラーとモデルとビューにコードを追加し、テストも書き直すよな?
なら、またテストのやり直しだ。
0521nobodyさん2014/05/15(木) 12:25:34.42ID:???
>>520
テストにもいろいろ種類があるが、ここで書け書け言われてるのは、
単体テストと呼ばれるやつな。

で、単体テストの場合、一連の処理をテストするんじゃなくて、
機能単位でテストする。
俺も理解は甘いから、機能単位と言い切って良いのかわからないけど。

なので >>509 のようなメソッドは、戻り値だけに着目すればよくて、テストが書きやすいんだけど、
コントローラーのテストはちょっと書きにくい。
コントローラーのメソッドはアクションで、実行されたあとの結果がいろいろあるからな。
0522nobodyさん2014/05/15(木) 12:37:38.37ID:???
>>520
あえて掲示板ということで、CommentsControllerのaddメソッドのテストで考えてみると

1 必須項目を省いてPOSTしたら、書けてない事
2 書き込み成功していいPOSTなら、書けてる事
3 名前を省略したら「nobodyさん」になる事

もっとあるとは思うけど、addメソッドのテストとして、こんなのを確認するテストを書いたとする。

「画像を追加できる」機能が必須項目じゃなければ、「画像を追加できる」を実装した後も、
このテストは3つの部分は期待通りに動いてることを確認できると思う。
で、画像を追加する投稿についてのテストをいくつか追記して、機能追加が完成できる。
この場合あくまでテストは追記だから、テストは書き直しとは言わないと思う。

画像が必須項目だったとしたら、1と2は書き直しになっちゃうだろうけど、これも微修正って範疇じゃないかと。
0523nobodyさん2014/05/15(木) 13:17:55.24ID:???
gitって、dropboxと違い
commitやマージが便利そうだな。
0524nobodyさん2014/05/15(木) 13:33:34.19ID:???
>>522
物凄く分かりやすい!参考になった。
つまり、その1〜3をこれまではブラウザでいちいち実行してたのを
テストコードさえ用意しておけば、自動で成否を出してくれるって事だよね?

それならテストを追加する意味もあるし、すごく便利だと思う。
0525nobodyさん2014/05/15(木) 16:23:27.92ID:???
>>524
伝わったようで何よりだけど、あげておとすようで悪いが、
質問してた人が言ってたようなデメリットもやっぱりあるよ。

実装が大きく変われば、さすがにテストも修正というより書き直しになるし、
あとさっきも書いたけどコントローラーはテスト書きにくい。
仕様変更で実装が大きく変わりやすい箇所でもある。

あと >>522 この例でいうと、「画像を追加できる」機能を追加した際、
ぶっちゃけテストなんてなくても1〜3は壊れないような実装になりそうな気がすごいする。

俺としては >>509 のような、ユーティリティ的なライブラリが、テストも書きやすいし恩恵も多いと思う。
実際困ったから書いたんだけど、時間というテストがめんどくさいデータで、
結局動作確認するには、4時丁度とその前後や、逆に0時丁度やその前後を引数に、呼んでみるしかないから、それってテストコードだしな。
で、ユーティリティだからサービスのいろんな箇所で呼ばれてて、ミスったときの影響範囲も広い。
なので、テストコードがないと、修正に及び腰になってしまう。
0526nobodyさん2014/05/15(木) 16:45:41.71ID:???
>>525
なんかよく分からなくなってきたな・・・。
コード書いて「こういうイメージ?」って聞こうとしたんだけど、
どう聞けばいいからすら分からず、固まってしまったよw
0527nobodyさん2014/05/15(木) 19:50:47.49ID:???
ここはなんのスレですか?
0528nobodyさん2014/05/15(木) 19:53:03.77ID:???
スレタイ読めないの?CakePHPのスレですよ?
ちなみにCakePHPにテストという機能がちゃんと用意されてますよ?
だからその事について話し合っているんですよ?
0529nobodyさん2014/05/15(木) 20:27:14.89ID:???
>>528
くわしく
0530nobodyさん2014/05/15(木) 20:53:28.94ID:???
>>529
http://book.cakephp.org/2.0/ja/development/testing.html
0531nobodyさん2014/05/15(木) 23:34:57.49ID:???
>>525
テストコードがないと及び腰ってのすごくわかる。
自分が作ったコードですら触りたくないもん。
0532nobodyさん2014/05/16(金) 13:54:12.18ID:???
では、先生方次は最近よく聞く
composerについて教えて下さい。
0533nobodyさん2014/05/16(金) 14:02:22.96ID:???
あとで知ったかで話すから、ちょっと勉強する時間をくれ
0534nobodyさん2014/05/16(金) 14:26:46.96ID:???
composerは依存する外部のライブラリ等を管理して
autoload処理までしてくれるもの

packgistに登録されているものの他に
gitやsvnとかで管理されているもの
zip等で落としてくるもの、PEARとかも管理できる

依存関係の解決や、バージョンアップの追従とかが簡単にできるのがいいね

更新時にスクリプト動かしたりもできるから、さらにいろいろ使えるよ
0535nobodyさん2014/05/16(金) 14:41:38.71ID:???
cakeはcomposer対応がめちゃくちゃ遅かったよな。
0536nobodyさん2014/05/16(金) 21:57:48.54ID:???
composerってRubyでいうとこのgem?
0537nobodyさん2014/05/16(金) 22:04:02.91ID:???
bundlerかな
0538nobodyさん2014/05/16(金) 22:12:07.93ID:???
>>537
なるほど、さんきゅー
0539nobodyさん2014/05/17(土) 02:35:10.07ID:???
routes.phpで指定できるURLのパターンに、DBから取得した値を設定することってできる?
例えば、
/domain/DB値 みたいな感じで
ちなみに、1.3系
0540nobodyさん2014/05/17(土) 03:35:24.78ID:???
>>539
2系では無理。routes.php のタイミングでは ClassRegistry がロードされていない。
1.3系は分からんが、やってみて確かめてみれば?
0541nobodyさん2014/05/17(土) 03:39:32.10ID:???
Model使わずに直接SQL叩けば宜し
0542nobodyさん2014/05/17(土) 05:32:08.69ID:???
>>539
うーん、たぶんできるんじゃね?

http://book.cakephp.org/2.0/en/development/routing.html#custom-route-classes
まず、カスタムルートクラスを使う。
Cookbookは英語しかないが、これ。

App::uses('CakeRoute', 'Routing/Route');
App::uses('ClassRegistry', 'Utility');
SlugRoute extends CakeRoute{
public function parse($url){
$parse = parent::parse($url);
$hoge = ClassRegistry::init('Hoge');
return $parse;
}
}

こういうカスタムルートクラス書いてみたら、$hogeにHogeのインスタンスがあることまでは確認した。
なお、phpがあるPCと、これ書いてるPHP別なので、上のコードにtypoがあるかもしれない。

カスタムルートクラスでApp::uses('ClassRegistry', 'Utility');することによる弊害があるかどうかは知らない。
0543nobodyさん2014/05/17(土) 11:47:50.48ID:???
>>542
それは単にルータのクラスをRouteから変更するだけじゃん。

ルーティングのタイミング(routes.php の読み込み)は一緒だから
Model のインスタンス取得できないんじゃないかってことなんだけど。
0544nobodyさん2014/05/17(土) 11:54:40.61ID:???
すまん、言葉足らずだった。
ルータのクラスを変更することは
ここでは問題になってないってことを言いたかっただけ。

で、今 routes.php で App::uses('ClassRegistry', 'Utility');
して Model のインスタンス取得したら問題なく動いたわ。
副作用は知らん。

1.3系は ClassRegistry ってないんだっけ?
途中から出来た?
その辺はよく分からん。
0545nobodyさん2014/05/17(土) 12:16:13.55ID:???
WordPressが記事URLのルーティングを管理画面から変えられるけど、
あんな感じにできれば便利だなとは思う
0546nobodyさん2014/05/17(土) 12:21:13.08ID:???
確かにそうだよな。
もっと初期段階でモデルにアクセスできる仕組みのほうがいい気がする。
他のFWとかのプロセスってこの辺りどうなってんのかな。
俺はCakeしか知らないから。
0547nobodyさん2014/05/17(土) 12:58:47.14ID:???
>>546
全体のローダーとルーティングで制限がかかるローダーはタイミングが別なものが多いよ
前者でモデルの読み出しができれば使える感じ
0548nobodyさん2014/05/17(土) 13:17:23.08ID:???
で、結局何が問題なの?

App::uses('ClassRegistry', 'Utility'); で初期段階でモデルにアクセスも出来たし、
あとはカスタムルートクラスで好きなようにパースして返せば、
良い書き方かはおいといて、動きそうな感じはしてるんだけど。
0549nobodyさん2014/05/17(土) 13:46:47.18ID:???
うん、行ける気がする

で、>>548 こそ何が問題なの?
■ このスレッドは過去ログ倉庫に格納されています