【PHP】Phrameを使う【フレームワーク】
■ このスレッドは過去ログ倉庫に格納されています
0001nobodyさん
04/08/23 14:15ID:???※関連リンク
Phrame本家
http://phrame.sourceforge.net/
PHPでMVC第1回:前編
https://www.stackasterisk.jp/tech/php/phpMvc01_01.jsp
開発談義/FrameWorkはどれがいい? - PukiWiki
http://w-project.org/pukiwiki/index.php?%B3%AB%C8%AF%C3%CC%B5%C1%2FFrameWork%A4%CF%A4%C9%A4%EC%A4%AC%A4%A4%A4%A4%A1%A9
0446nobodyさん
2005/03/26(土) 12:26:09ID:???向こうでもレスしたが、頼むから最小限のコードを晒してくれ。
B(aview)->C(caction)に直接 $request の内容を渡すのは不可能(だったと思う)。
普通は(というか漏れのやり方では)、
A->B->A->C->D
という風にしてる。
とりあえず、BとCでそれぞれ別々にvar_dump($request)してみ。
0447445
2005/03/26(土) 13:11:17ID:ZLYZLtNYレスありがとう。推移はB->Cですが、Bではこのデータについて何もしてません。
最小限のコードといわれてもどこまで書けばいいのか…改行が多すぎるといわれて蹴られたので
分けてアップします。
A.
class AAction extends Action {
//execute()が実行される動作は略
function execute(&$controller, &$request, &$user)
{
$datalist = new DataList()//クラス宣言等は省略
$request->setAttribute('datalist', $datalist);
return SUCCESS;
}
}
B.
class AView extends View {
//特にdatalistについては何もしない
//Aの結果表示「完了しました」等の表示と次の処理をする「ボタン」の表示
//ボタンクリックでCへ
}
0448445
2005/03/26(土) 13:11:57ID:ZLYZLtNYC.
class CAction extends Action {
//execute()が実行される動作は略
function execute(&$controller, &$request, &$user)
{
$datalist = $request->getAttribute('datalist');
//$datalist は空。NGが表示される。
if (empty($datalist))
print 'NG';
} else {
print 'OK';
}
//念のため…
print_r($datalist);
//何も表示されない
}
}
Aのデータ処理->Bで結果表示と次への進行確認->Cで次のデータ処理->Dで結果表示
という流れでなんですがね。
0449445
2005/03/26(土) 14:00:46ID:???Cでは存在しません。
A->Cというのは、$controller->foword()でいいんでしょうか。
それだと$requestの内容を引き渡せるのでしょうか。
0450nobodyさん
2005/03/26(土) 14:22:16ID:???まず
× SUCCESS
○ VIEW_SUCCESS
> var_dump($request)してみました。オブジェクトはBでは存在しますが
> Cでは存在しません。
当たり前。
> A->Cというのは、$controller->foword()でいいんでしょうか。
その通り。
> それだと$requestの内容を引き渡せるのでしょうか。
多分いける。
漏れの場合、オブジェクトじゃなくて単なる数字とか文字列とかでやってたけど、確かいけた。
$datalistとやらが変化しないのであればいける。変化するのであれば無理。$_SESSION使え。
自信はないけどこんな感じでいいか?
0451450
2005/03/26(土) 14:24:52ID:???最後のは嘘。
漏れの場合はformでhiddenしてRequest::getParameter()してた。
でも、$SESSION使うといけるのはホント。
0452445
2005/03/26(土) 15:11:46ID:???A.
class AAction extends Action {
function execute(&$controller, &$request, &$user)
{
$datalist = new DataList()//クラス宣言等は省略
$_SESSION['datalist'] = $datalist;
return VIEW_SUCCESS;
}
}
C.
class CAction extends Action {
//execute()が実行される動作は略
function execute(&$controller, &$request, &$user)
{
$datalist = $_SESSION['datalist'];
var_dump($datalist);
}
}
で、
object(__PHP_Incomplete_Class)(2) { ["__PHP_Incomplete_Class_Name"]=>…
となってしまうのですが、session_start等はmojaviにやってもらってるので
どうしましょうか。
0453nobodyさん
2005/03/26(土) 15:38:43ID:???ブログ、ソーシャルネットワーキングに続く
次世代コミュニティーサービスのこと。
YOUTYでは無料でWEB上に自分のバーチャルな部屋を持って
書籍,CD,DVD,ゲーム等,趣味,生活に関する情報を
WEB上で公開する事ができるコミュニティーサービスのこと。
http://youty.jp/
0454nobodyさん
2005/03/26(土) 17:16:42ID:???session_start()の前にクラス定義を読み込んでおかないと
セッションでそのクラスをうまく渡せない
Mojaviのsession_start()はSessionContainerがload()されるタイミング(Controller::dispatch()内)
なので、その前にクラス定義を読み込むか、
インスタンスではなく必要なメンバ変数の中身をセッションに乗せるかすればいい
漏れは後者でやってるな
0456nobodyさん
2005/03/27(日) 09:59:43ID:IW5S1bKC//AAction::execute()内
$datalist = new DataList()
$user->setAttribute( 'datalist', $datalist );
//CAction::execute()内
$datalist = $user->getAttribute( 'datealist' )
じゃダメ?
0457445
2005/03/28(月) 14:28:08ID:???>>454
最初は、デフォルトで添付されてるfilterを弄って動作させてて、(grepしました)
なんだかスマートさに書けるなぁと思っていたら、そんなことしなくてもよかったですね。
>>456
$userにもAttributeがあったのね(恥)。それでOKでした。
その方がmojaviらしいです。
正直、ViewからActionへAttributeは渡らないということについて
なぜソースソースと田舎の洋食屋のように言うのかわからなかったんですが
(渡ってない事実を質問してるのにvar_dumpさせるのもよくわからないんですけど)
こういうアドバイスにつながるんですね。
ありがとうございました。
0458nobodyさん
2005/03/28(月) 15:27:56ID:???よかったね。
でも、ソース晒すのは当たり前だよ。
100行の文章よりも10行のソースの方がわかりやすいからね。
ソース見た方が何してるかが一目瞭然だし。
0459nobodyさん
2005/03/28(月) 21:00:20ID:???mojaviは各モジュールにテンプレートフォルダを持っています。またグローバルな
テンプレートフォルダも持っています。
flexyはinstance作成時に引数としてoptions(テンプレート、コンパイルフォルダ
の場所)を渡さなければなりません。
このような場合各モジュールにあるテンプレートフォルダを無視して
グローバルに統一したほうがflexyのラパークラスとしてすっきりしますか?
0461nobodyさん
2005/03/29(火) 04:10:37ID:???E_USER_ERROR -> warning
E_USER_WARNING -> fatal
って逆になってるような気がするんだけど、なんか意味あんの?
0462nobodyさん
2005/03/30(水) 17:22:13ID:???階層化されたサイトの場合
イメージは公開フォルダに入れないといけなくてパスの管理が面倒です。
0463nobodyさん
2005/03/30(水) 17:48:23ID:???0464nobodyさん
2005/03/30(水) 17:56:55ID:???階層化ってどういう意味でおっしゃられていますか?
ページコントローラモードを含む場合?
モジュール毎に画像ディレクトリやCSSディレクトリを変更したい場合は、
config.phpで定義されているWEB_MODULE_DIR定数をなんらかの形でテンプレー
ト変数に設定してやればいいと思います。
webapp/config.php:
/**
* An absolute web path where modules can store public information such as
* images and CSS documents.
*/
define('WEB_MODULE_DIR', '/modpub/');
0465nobodyさん
2005/03/31(木) 00:32:35ID:???例えば
/index
|
|/products/
|/info/
このような階層の場合products/層には製品の写真とか入ります。
0466nobodyさん
2005/03/31(木) 20:04:45ID:???申し訳ありませんが、意図が掴めません。
462の質問に回答するなら、Mojaviテンプレートを使用しようが、しまいが、
ディレクトリが階層化されていようが、いまいが、公開イメージファイルはド
キュメントルート以下に置きますし、非公開イメージファイルはドキュメント
ルート外に置きisSecure()がtrueなアクションから出力することになるでしょ
う。
パスの管理という意味ではSCRIPT_PATH環境変数やMojaviが提供する定数を駆
使してなんらかのテンプレート変数化を行えば良いと思います。
0467nobodyさん
2005/04/02(土) 17:44:36ID:???0468nobodyさん
2005/04/05(火) 22:29:28ID:???ぴーふれいむ?
0470nobodyさん
2005/04/06(水) 16:29:00ID:???0471nobodyさん
2005/04/06(水) 16:50:08ID:???0472nobodyさん
2005/04/07(木) 11:18:01ID:ZERwNqG/モデルとビューを分けるメリットが分かりません。
コントローラーとその他を分けるのはとても分かりやすいのですが、
モデルとビューは密接に関わっているのでわざわざ分けてしまうと
面倒ではないですか?
0473nobodyさん
2005/04/07(木) 12:27:27ID:???0474nobodyさん
2005/04/07(木) 15:41:20ID:???モデルとビューが密接に関わっている、って具体的にどういうこと?
例えば、モデルが保持している情報を出力する際にユーザーエージェントに応じて
HTML/XHTML/CHTMLのいずれかで出力する必要がある、という場合には普通モデルと
ビューを分けると思うんだけど。
0475nobodyさん
2005/04/09(土) 21:43:17ID:???>モデルとビューは密接に関わっているので
はぁ?密接に関わるような作り方してんの?基礎からやりなおしたほうがいいよ。
0477nobodyさん
2005/04/09(土) 23:48:13ID:???モデルとビューを分離しないなら
似たようなビジネスロジックのコードを何度も書く事にならないかい?
0478nobodyさん
2005/04/10(日) 00:36:15ID:???つか、MVを分離する利点がわからないのに、なんで、MVCフレームワーク作るんだ!とか思うわけ?
理解できない。
0479nobodyさん
2005/04/10(日) 02:25:31ID:???0480nobodyさん
2005/04/10(日) 02:32:37ID:???モデル=数値データだとすると、ビューは折れ線グラフ、棒グラフ、ヒストグラム、スプレッドシートなんかにできるわけです。
ビューとモデルが密接になっていると上のような「単一モデルに対して複数ビューを持つ」というのが作りにくくなります。
よって、きちんと分割してしまった方が良いのです。
0483nobodyさん
2005/04/10(日) 16:30:05ID:???ライブラリ用のディレクトリを置く場所について嘘をついてしまいました。
本当はhtdocs以下になくていいのに、なきゃいけないと嘘を教えてしまった
のですが、どうしたら気づかれずにhtdocsより上の階層に置き換えて
しらばっくれることができるでしょうか。
0484nobodyさん
2005/04/10(日) 18:35:27ID:???シンボリックリンクで外のフォルダとくっつけて、
ほ〜ら、コンテンツの維持が楽だよ〜と
ふんで Apache の設定でリンク不許可
こーすれば安心!
って違うよね・・
0485nobodyさん
2005/04/10(日) 19:14:54ID:???小細工されるより正しいやり方の指示を受け その上で謝罪もあれば尚良し、
だろうねぇ。
「だから最初にhtdocs以下じゃなくてもいいんじゃないの?って聞いたじゃん」
って言われる事くらい覚悟すれ。
つーか今でもその疑惑を持っていると思われ。早い方がいいよ。
0486nobodyさん
2005/04/10(日) 21:48:54ID:???あまりにしょうもない質問だな。
強いて言うなら「open_basedirの設定変えたから置けるようになったよ!」とか…。
しかしどのみち無知を晒す結果にしかならないだろうから、
素直に謝りなさい。
0488nobodyさん
2005/04/13(水) 17:26:46ID:???落ちてるのか
0489nobodyさん
2005/04/13(水) 17:45:12ID:???ttp://69.61.21.69/ は?
Moving to a new server
April 11th, 2005
We're schedule to move to our new server tonight.
DNS will be updated tomorrow. While the DNS propogates, you may see an outage.
Have no fret, once your DNS cache is updated, all will be working well.
Outages may start occuring tomorrow.
0490nobodyさん
2005/04/13(水) 19:55:56ID:???サンクス!
そっちは繋がったよ。
なるほど新しい鯖に引っ越したのね
まだwww.mojavi.orgは引けないけど
DNSキャッシュの更新待ちなのかな
田舎のISPだとこんなものか
0491nobodyさん
2005/05/01(日) 00:56:23ID:???ユーザ登録Action、ユーザ編集Action、ユーザ削除Actionって別々でつくるのがいいのか、
ユーザActionつくってそのなかに登録、編集、削除メソッドつくるのがいいかどっちでしょう。
それとも別のいいやりかたありますか?
0493nobodyさん
2005/05/06(金) 16:11:02ID:???私見ですが、
前者のメリット
o Mojaviの権限管理機構を使って機能毎に細かく制御可能。
o execute()内のケースがシンプルになる。
前者のデメリット
o そのままでは登録・編集のバリデーションコードが重複するためメンテナン
スしにくい。
後者のメリット
o 登録・編集のバリデーションコードが重複しないためメンテナンスしやすい。
後者のデメリット
o Mojaviの権限管理機構を登録・編集等の機能毎の制御に使えない。
o execute()内のケースが複雑になる。
といったところです。バリデーションコードを重複しないように工夫できれば
前者がお勧めです。
0494491
2005/05/08(日) 16:37:14ID:???ありがとうございます。
>後者のメリット
>o 登録・編集のバリデーションコードが重複しないためメンテナンスしやすい。
これに関してですが、後者の場合はデメリットになりえます。
削除処理でも登録、編集のバリデーションが発動してしまうので、M3なんかだと手の施しようがないんですよね…
権限については、hasCredentialなんかもあるので、それでやりくりは可能だと思います。
個人的には後者のメリットは、素人考えですがよりオブジェクトっぽくなるかなというところだと思ってます。
>o execute()内のケースが複雑になる。
これも、登録、編集のクエリをそのままメソッド名に使っちゃえばいいのでそんなに複雑にはならないのではないでしょうか?
バリデーションの重複については、M2では共通の親Actionで継承できたのに、M3ではAction名のバリデーションファイル
を作らなければいけなくなったので、重複しちゃうんですよね。
0495nobodyさん
2005/05/09(月) 17:12:20ID:???登録/編集/削除フラグを立ててValidateメソッド内で条件分岐しております。
0497nobodyさん
2005/05/10(火) 03:49:56ID:???↑エロゲサイトにまで使われるmojavi
0498nobodyさん
2005/05/10(火) 16:07:43ID:???↑
ここのひとって、
$form =& $request->getAttribute('form');
ってやってるけど、php5ってオブジェクトはデフォルトで参照渡しになるんじゃなかったっけ?
&いらないんじゃね?
0499nobodyさん
2005/05/10(火) 17:04:29ID:???そのサイトのどこにMojavi使われてるの?
まさか「majo2」がURLにあったからなんて言わないよね。
でもって釣られた俺、南無。
0503nobodyさん
2005/05/10(火) 18:02:37ID:???0504nobodyさん
2005/05/10(火) 18:04:27ID:???TOPからいける商品情報リンクでいきなりこんなんでますが?
Fatal error: Call to undefined function: setfetchmode() in /usr/local/share/pear/MDB/QueryTool/Query.php on line 325
Call Stack
#FunctionLocation
1{main}()/home/wwwchroot/www/htdocs/engine:0
2customcontroller->dispatch()/home/wwwchroot/www/htdocs/engine:136
3customcontroller->forward()/home/wwwchroot/www/lib/mojavi/mojavi-all-classes.php:412
4filterchain->execute()/home/wwwchroot/www/lib/mojavi/mojavi-all-classes.php:481
5outputbufferingfilter->execute()/home/wwwchroot/www/lib/mojavi/mojavi-all-classes.php:163
6filterchain->execute()/home/wwwchroot/www/webapp/lib/OutputBufferingFilter.class.php:14
7mappingrequestvarsfilter->execute()/home/wwwchroot/www/lib/mojavi/mojavi-all-classes.php:163
8filterchain->execute()/home/wwwchroot/www/webapp/lib/MappingRequestVarsFilter.class.php:21
9db_dataobjectfilter->execute()/home/wwwchroot/www/lib/mojavi/mojavi-all-classes.php:163
10filterchain->execute()/home/wwwchroot/www/webapp/opt/filters/DB_DataObjectFilter.class.php:22
11executionfilter->execute()/home/wwwchroot/www/lib/mojavi/mojavi-all-classes.php:163
12listaction->execute()/home/wwwchroot/www/lib/mojavi/mojavi-all-classes.php:97
13customquerytool->customquerytool()/home/wwwchroot/www/webapp/modules/catalog/actions/listAction.class.php:61
14customquerytool->setdbinstance()/home/wwwchroot/www/webapp/lib/CustomQueryTool.class.php:16
0505nobodyさん
2005/05/10(火) 18:07:20ID:???0506nobodyさん
2005/05/10(火) 18:32:08ID:???仕事中だからあちこちクリックできねーんだよニート共が!
みたいに逆切れするに100Mojavi
0507nobodyさん
2005/05/10(火) 18:33:13ID:???0508nobodyさん
2005/05/10(火) 18:36:07ID:???URL見るだけでもわかりそうなもんだが…
http://fandc.co.jp/engine/module/catalog/action/list/
↑ほら入ってみなさい
0509nobodyさん
2005/05/11(水) 02:11:13ID:???PEAR も Mojavi もいいけど、display_errors = off とか、まず最初に普通の事を普通にやろうぜ、と。
0510nobodyさん
2005/05/11(水) 02:23:01ID:???0511nobodyさん
2005/05/11(水) 02:35:23ID:???0517nobodyさん
2005/05/17(火) 16:51:08ID:???ttp://cgi39.plala.or.jp/klove/w/k.cgi?page=Seasar2%A4%F2%BB%B2%B9%CD%A4%CBphp%A4%C7DI%A5%B3%A5%F3%A5%C6%A5%CA%A4%F2%BC%C2%C1%F5%A4%B9%A4%EB
うちの会社はPHP4環境ですががががが。
0518nobodyさん
2005/05/18(水) 09:47:20ID:6htWVmYW認証していない状態で、isSecure(return TRUE)が設定されているモジュールを呼び出すと
AUTH_MODULE、AUTH_ACTIONで指定されたモジュールにフォワードされますが、そのモジュールで
認証後に元のページに戻るにはどうしたらいいのでしょうか?
複数の場所から認証モジュールにジャンプするので、戻る場所が1箇所ではありません。
引数のmoduleとactionから判断するのがいいのかな?
0519nobodyさん
2005/05/18(水) 10:16:30ID:???$controller->forward('originalModule','originalAction');
かな? Mojavi使ったこと無いけど、まるごとにあった。
0520nobodyさん
2005/05/18(水) 10:36:55ID:???Mail: sage
----------------
>>518
次のようなフィルターを経由してRendererで設定し使っています。
class NextActionFilter extends Filter {
function execute(&$filterChain, &$controller, &$request, &$user) {
static $loaded;
if ($loaded === null) {
$loaded = true;
$nextModule = $request->getParameter('nextModule');
if ($nextModule === null) {
$nextModule = $controller->getRequestModule();
}
$nextAction = $request->getParameter('nextAction');
if ($nextAction === null) {
$nextAction = $controller->getRequestAction();
}
if ($nextModule === 'Default' && ($nextAction === 'Login' || $nextAction === 'Logout')) {
$nextModule = DEFAULT_MODULE;
$nextAction = DEFAULT_ACTION;
}
$request->setParameter('nextModule', $nextModule);
$request->setParameter('nextAction', $nextAction);
$filterChain->execute($controller, $request, $user);
} else {
$filterChain->execute($controller, $request, $user);
}
}
}
0521520
2005/05/18(水) 10:39:40ID:???ここではフォワードされた場合( $loaded !=== null )にはスルーにしています。
例えば、Smartyテンプレートでは次のようにして使います。
{if $nextModule != "" && $nextAction != ""}
<input type="hidden" name="nextModule" value="{$nextModule|escape:"html"}">
<input type="hidden" name="nextAction" value="{$nextAction|escape:"html"}">
{/if}
まるごとのoriginalModuleとoriginalActionにnextModuleとnextActionで対応します。
以上、参考になれば。
0522520
2005/05/18(水) 10:40:51ID:???ここではフォワードされた場合( $loaded !=== null )にはスルーにしています。
!== の間違いです。
0523518
2005/05/18(水) 12:32:16ID:6htWVmYW>>519
まるごとは私も持っています。
$controller->forward('originalModule','originalAction');
だと、index.php?module=originalModule&action=originalActionが
呼ばれるだけで元には戻れませんでした。
なので、まるごとで書かれているコメントは間違い(というより、
そこは自分で置き換えろということ)みたいです。
>>520
参考にさせて頂きました。
input type="hidden"の項目を置くのは認証モジュールのフォームで、
認証後にここにセットされているModuleとActionにフォワードする
ということでよろしいでしょうか?
やはり認証モジュール内で呼び出し元を保持して画面遷移しないと
無理っぽいですね。
0525518
2005/05/18(水) 12:43:02ID:6htWVmYW了解です!
素早い回答ありがとうございました。
本当に助かりました。
0526518
2005/05/18(水) 13:14:54ID:6htWVmYWただ、少し問題点もありました。
複数ある認証モジュールの呼び出し元の引数がそれぞれ異なる場合に
認証モジュール内でそれを全て引き継いでいかなかればいけないという
のが一つ。
もう一つは認証モジュールの呼び出し元がGETとPOSTでVIEWを切り替えて
いる場合で、<A>タグから呼び出し元がGETで呼ばれた後に認証モジュールに
ジャンプして認証画面でsubmitでログインして戻ってくるとPOSTで認証元
が呼ばれてしまうためVIEWの切替がうまくいきません。
なので、認証モジュールの呼び出し元はGETとPOSTで両方同じ処理にしておく
必要がありそうです。
0527nobodyさん
2005/05/18(水) 13:20:25ID:???0528nobodyさん
2005/05/20(金) 21:12:39ID:???$request->setMethod(REQ_GET);
$controller->forward( NEXT, NEXT);
0529nobodyさん
2005/05/20(金) 21:21:54ID:???ログイン画面に来た時にリファラを取得しておいて、
外部サイトからだったら、indexのページ、
内部からだったら、そのリファラに飛ばせば良いんじゃないの?
0530518
2005/05/20(金) 22:19:06ID:iZfZHOa+1.認証モジュール内でgetMethodしてGETかPOSTかを取得してセッションに保存。
2.getParametersで引数をすべてセッションに保存。
3.ユーザ認証
4.ユーザ認証OKならセッションに保存した引数を全てsetParameterする。
5.上記1で取得したのがGETならredirect、POSTならforwardする。
実際に作ってないのでホントに動くか分かりませんがw
0531nobodyさん
2005/05/21(土) 17:11:07ID:???小回り聞くし、使い勝っても良いし。
ちなみに俺のフレームワークは↓ここのサイトのを
http://www.stackasterisk.jp/tech/php/phpMvc01_01.jsp
参考に作りました。
0534nobodyさん
2005/05/21(土) 22:45:29ID:3M7QHA3T0535nobodyさん
2005/05/21(土) 23:11:49ID:???0536nobodyさん
2005/05/21(土) 23:17:39ID:???0537nobodyさん
2005/05/21(土) 23:25:05ID:???DB_DataObjectやPropelとかのo/rマッパがあるのに今更DAOの概念て…
お前もう少しがんばった方がいいよ
0538nobodyさん
2005/05/21(土) 23:28:15ID:???0539nobodyさん
2005/05/21(土) 23:32:31ID:???0541nobodyさん
2005/05/22(日) 01:01:02ID:???とりあえずメンテナの一番多いだろうmojaviの大半の機能を使うくらいのプログラムを組んで
流通してるフレームワークの強さを体感したらいいよ。
一部しか使わないから覚えるのマンドクセ、自作マンセーになる。
0543nobodyさん
2005/05/22(日) 01:32:24ID:???おいおいおい、mojavi信者が必死だなw
お前らみたいなフレームワークも自作できないような屑は
プログラマを語るなよ。な?
0544nobodyさん
2005/05/22(日) 01:39:03ID:???>お前らみたいなフレームワークも自作できないような屑は
という事はお前さんは自作してるんだろうから公開してみたら?
それが出来ない限り、お前さんもフレームワーク自作できるとの証明にはならないから、
お前さんの理論でお前さん自信が『屑』である。
0545nobodyさん
2005/05/22(日) 01:54:42ID:???フレームワーク自分で作る意味がわからんのだが。
教えてplz
つーかフレームワーク自作するやつは当然Pearなんて使わないんだよね?
■ このスレッドは過去ログ倉庫に格納されています