【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
0653nobodyさん
2005/06/14(火) 03:09:43ID:???>最後の一行は余計だったかなぁ。。その上の行の捕捉みたいなつもりだったのだけど。
別に真意を知りたかっただけ。特に余計とかは思ってない。
namespaceはユーザのグループというよりは、権限のカテゴリと考えるのが妥当だね。
0654643
2005/06/14(火) 03:54:18ID:???認証・特権に関係する部分を読んでいた時のメモっす。@mojavi2
追試しようとする人は参考にしてちょ。
mojavi全体の処理ダイアグラムも参照。
ttp://www.mojavi.org/images/diagrams/2.0/action_sequence.png
段組は関数呼び出し・if文等処理の区切り。関数名の後ろの::はその関数のクラス名。
index.php
require_once(AUTH_DIR . 'PrivilegeAuthorizationHandler.class.php'); -(1)
require_once(USER_DIR . 'PrivilegeUser.class.php'); -(2)
$authHandler =& new PrivilegeAuthorizationHandler;
$user =& new PrivilegeUser; -(3)
$controller->setAuthorizationHandler($authHandler);
$controller->setUser($user);
$controller->dispatch()
0655nobodyさん
2005/06/14(火) 03:54:32ID:???function dispatch()
$this->forward($modName, $actName);
function forward($modName, $actName)
$filterChain =& new FilterChain;
$filterChain->register(new ExecutionFilter);
$filterChain->execute($this, $this->request, $this->user);
function execute(&$filterChain, &$controller, &$request, &$user)::ExecutionFilter
if($action->isSecure()) -(4)
$authHandler =& $controller->getAuthorizationHandler();
$authHandler->execute($controller, $request, $user, $action)
function execute (&$controller, &$request, &$user, &$action)::PrivilegeAuthorizationHander
if(!$user->isAuthenticated()) -(5)
$controller->forward(AUTH_MODULE, AUTH_ACTION);
$privilege = $action->getPrivilege($controller, $request, $user); -(6)
if ($privilege != NULL && !isset($privilege[1])){ $privilege[] = 'org.mojavi'; } -(7)
if ($privilege != NULL && !$user->hasPrivilege($privilege[0], $privilege[1])){ return FALSE; } -(8)
return TRUE; -(9)
0656nobodyさん
2005/06/14(火) 03:54:50ID:???(2) ユーザ特権を使う場合は、index.phpのコメントアウトから有効化
(3) Userクラスの代わりにPrivilegeUserクラスを使う。opt/user/PrivilegeUser.class.php
(4) Action内でisSecure()がtrueを返すようにオーバーライドしておくと、認証/権限が実行される。オーバーライド前は、return FALSE。(9)も参照。
(5) User::setAuthenticated(true)されていれば認証済み。(9)も参照。
(6) Action内でgetPrivilegeが特権名/名前空間の配列を返すようにオーバーライドしておく。オーバーライド前はreturn NULL。(9)も参照。
(7) 名前空間が設定されていない場合は、org.mojaviと名前空間に使う。
(8) User::addPrivilege(name,namespace)したものの中に、(6)の特権名/名前空間を満たすものが無ければ、特権無しと判断する
(9) 認証が成功した場合や、特権有りまたは特権不要の場合に、trueを返す
0657nobodyさん
2005/06/14(火) 05:44:36ID:QOcUcvCe動的にXMLを作成しようとすると、1行目に改行が入ってしまいます。
以下view
$renderer->setTemplate('recentXml.xml');
$renderer->setAttribute('result' , $request->getAttribute('result') );
以下template
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<data>
<result>{$result}</result>
</data>
以下compileの中身
<?php /* Smarty version 2.6.9, created on 2005-06-14 05:18:37
compiled from recentXml.xml */ ?>
<?php echo '<?xml'; ?>
version="1.0" encoding="UTF-8" standalone="yes"<?php echo '?>'; ?>
<data>
<result><?php echo $this->_tpl_vars['result']; ?>
</result>
</data>
0658nobodyさん
2005/06/14(火) 05:44:49ID:QOcUcvCe<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<data>
<result>1</result>
</data>
<!-- Page was processed in 0.0412 seconds -->
この1行目の改行をなくすためにはどうすればよろしいでしょうか?
0659nobodyさん
2005/06/14(火) 06:17:32ID:????>
とかになってるんじゃないのかな多分。
0660657
2005/06/14(火) 10:25:49ID:QOcUcvCeブラウザでアクセスした際、1行目に改行が入っていました。
原因はわかりません。
0662nobodyさん
2005/06/14(火) 11:32:29ID:???0663nobodyさん
2005/06/16(木) 17:29:13ID:???検索してもGlobalフィルタのおざなりな説明しかないなぁ。。
フィルターには2種類あり、全てのmodule/actionで呼び出されるもの(globalフィルタ)と
特定のモジュールで呼び出されるもの(moduleフィルタ)からなる。
個々のフィルタには前処理・後処理という2段階の実行順序があり、
登録した順に前処理が全て実行されてから、今度は逆順に後処理が実行される。
Actionの実行部分もフィルタの一種として扱われていて(ExecutionFilter)、
全てのフィルタの登録後に自動的に登録されている。
結果、登録順に1,2...の番号を付けた時に、
1. GlobalFilterのpre-filter1,pre-filter2...を実行
2. moduleFilterのpre-filter1,pre-filter2...を実行
3. ExecutionFilterを実行(認証や特権の判定、action処理)
4. moduleFilterの...post-filter2,post-filter1を実行
5. GlobalFilterの...post-filter2,post-filter1を実行
という順番で処理されることになる。
フィルタ機能の実現には3つのクラスが関係していて、
FilterChain - フィルタを実際に行う仕組み
FilterList - フィルタの順序リスト
Filter - 実際の処理内容
このうち、FilterList、Filterを書くことになる。
0664nobodyさん
2005/06/16(木) 17:31:03ID:???グローバルフィルタ
BASE_DIR/GlobalFilterList.class.phpを作成
BASE_DIR/GlobalFilterList.class.php
class GlobalFilterList extends FilterList{
function registerFilters(&$filterChain,&$controller,&$request,&$user){
require_once(<filter-file-path>); // 利用するfilter分だけ繰り返し
$filterChain->register(new <filter名>); // 利用するfilter分だけ繰り返し
}
}
モジュールフィルタ
BASE_DIR/modules/<module名>/<module名>FilterList.class.phpを作成
<module名>FilterList.class.php
class <module名>Filterlist extends FilterList{
function registerFilters(&$filterChain,&$controller,&$request,&$user){
require_once(<filter-file-path>); // 利用するfilter分だけ繰り返し
$filterChain->register(new <filter名>); // 利用するfilter分だけ繰り返し
}
}
0665nobodyさん
2005/06/16(木) 17:31:45ID:???<Global|module名>FilterList.class.phpの中でrequire_onceする時にパスを書くので、
そのパスと合ってさえいれば適当な場所でよい。
<filter>.class.php
class <filter名> extends Filter{
function execute(&$filterChain,&$controller,&$request,&$user){
static $loaded;
// ActionChainやAction::forwardを使った時にフィルタが複数回適用されるのを防ぐ
if($loaded == NULL){
$loaded = TRUE;
// 前処理フィルタ
...
// filter chain の次のフィルタを実行
// pre-filterとpost-filterの分岐点
$filterChain->execute($controller,$request,$user);
// 後処理フィルタ
...
}else{
$filterChain->execute($controller,$request,$user);
}}}
[捕捉]
上の <Global|module名>FilterListは FilterListのregisterFiltersをオーバーライドして
Filterの読み込みと登録をしているが、コンストラクタで読み込む方法もありっぽい。
その場合は、
class <Global|module名>FilterList extends FilterList{
function & FilterList(){
require_once(<filter-file-path>); // 必要な分だけ
$this->filters[] = new <filter名>; // 必要な分だけ
}}
となる。元のregisterFiltersは$this->filtersをカウントしてregisterしてくれる。
0666nobodyさん
2005/06/17(金) 00:54:35ID:M5DVt6+60667nobodyさん
2005/06/17(金) 04:20:04ID:???by ショーン・カー
0668nobodyさん
2005/06/17(金) 11:59:25ID:???やって来なくていい。
0670nobodyさん
2005/06/18(土) 12:06:50ID:1zysAWYsハードディスクがぶっ壊れた
0671nobodyさん
2005/06/18(土) 20:56:20ID:???俺は見ている、役立っている。わかんないヤツがgoogleで検索して
みにくるトキもあると思う。
へこまずに気がむいたらまた来てくれよな。
いろんな意見があることに甘えるやつもいるだろう。
俺はあんなこと言われたらヘコミまくるからさ。じゃね。
0672nobodyさん
2005/06/18(土) 21:21:28ID:???今落ちてるけど
0673nobodyさん
2005/06/19(日) 03:04:25ID:???つかミラーもねーのかよ
ダウンロードしたいのに〜
0674nobodyさん
2005/06/19(日) 06:09:40ID:???0675nobodyさん
2005/06/19(日) 14:00:36ID:???0676nobodyさん
2005/06/19(日) 16:01:49ID:???こんなレベルの管理しかされていないものを組み込むのは
結構リスキーなんじゃないかと思えて来た…
0677nobodyさん
2005/06/19(日) 18:48:54ID:???0679nobodyさん
2005/06/20(月) 00:24:27ID:???0680nobodyさん
2005/06/20(月) 20:04:04ID:???0681nobodyさん
2005/06/21(火) 02:45:48ID:???0682nobodyさん
2005/06/21(火) 09:41:27ID:???節約できるリソースってざっくばらんに言って何%くらい?
0683nobodyさん
2005/06/21(火) 10:27:59ID:???Mojavi3の資料すくねー!
「極めるPHP」は本当に「さわり」だけだし
ネット渉猟しても2用だったりで
全体像が見えるチュートリアルが見あたらない。
日本でMojavi使ってる奴って100人くらいじゃないかと思えてくるよ。
楽をしたいのに、楽をするための苦労がやけに多い…
0684nobodyさん
2005/06/21(火) 10:45:34ID:???ほとんどが実験レベルなので、情報も外に出さないし。
0685nobodyさん
2005/06/21(火) 10:53:36ID:???モジャビジャパン発見!
しかし3の資料はほとんどない
興味ある人は多そうなのに資料がやけに少ない
ネット時代にふさわしくないこの状況はいかに。
0686nobodyさん
2005/06/21(火) 11:09:40ID:???実際の話、PHP5って普及してるの?
先行して一儲けをたくらむ輩(出版社とか)がお盛んなだけな気がするんですが。
0687nobodyさん
2005/06/21(火) 11:11:42ID:???mojavi-users
ttp://ethna.jp/mailman/listinfo/mojavi-users
0690683
2005/06/21(火) 21:54:30ID:???読みやすいコードだけど
クラスの数が多いな…
0691nobodyさん
2005/06/22(水) 00:04:16ID:???すまん俺が言ったのはPHP5やMojavi3のことではなくて、
実験的に使ってみているだけだから、という意味。
0693nobodyさん
2005/06/22(水) 10:06:26ID:???実験的な、確定的でない情報は
なかなか外に出しにくいのはごく自然なことだと思うが…。
0695nobodyさん
2005/06/22(水) 10:42:59ID:???わざわざリソース投じてまで公開しようとはあまり思わないだろう。
0697nobodyさん
2005/06/22(水) 13:06:43ID:???目的があるから実験するわけよ。
目の前にやることがあるのに、成果が定かでない目的外作業に
エネルギーを向けたりはなかなかしないんだよ、
ぼくちゃん。
0698nobodyさん
2005/06/22(水) 13:16:09ID:???0699nobodyさん
2005/06/22(水) 13:18:57ID:???俺もオッサンに同意だがw
0700nobodyさん
2005/06/22(水) 14:20:40ID:???WaWaWaに採用が決まったので今後期待できそう、みたいな文章をどこかで読んだが
WaWaWa自体がぱっとしないよな。
0701nobodyさん
2005/06/22(水) 14:28:10ID:???0702nobodyさん
2005/06/22(水) 14:29:18ID:???0703nobodyさん
2005/06/22(水) 15:31:56ID:iwn9lgN+ここのチュートリアル見ながらモジャ3を見て行ってるんだけど
モジャってActionからViewへのデータコンテナは
Requestを使うのが普通なん?
Request=Post/Getのコンテナという感覚なので
若干違和感を感じたんだけども。
0704703
2005/06/22(水) 22:32:14ID:???標準で各層間のデータコンテナとして使ってるんやね
0705nobodyさん
2005/06/22(水) 22:56:31ID:???なんでだろ?
0706nobodyさん
2005/06/23(木) 03:41:21ID:???とゆうことはみんなphp5なのか?
0707nobodyさん
2005/06/23(木) 06:19:30ID:???0708nobodyさん
2005/06/23(木) 10:41:29ID:???設定ファイル関連の仕様が変わるっぽい。「iniわかりづれーし、xmlパーサーおせえから独自のにする」とかなんとか。
0709nobodyさん
2005/06/23(木) 10:52:29ID:???マジかよ!
まあでも独自フレームワークにするかMojaviにするか迷ってたんでふんぎりついたわ。
Mojaviを参考にしながら必要十分程度の軽さのやつつくろ。
0710nobodyさん
2005/06/23(木) 14:06:14ID:???今更自作できねぇなw
FilterChainやActionChainの発想なんて自分で思い付くのに一体何年かかるやら
mojavi2+php4+アクセラレータでがんがるか…
0711nobodyさん
2005/06/25(土) 11:36:32ID:???Ethnaとかどうよ?
後発だけに割と練られてるんじゃないかと思われる。パッと見だが。
Pear::DBに依存してそうな感じだからスルーしてる。
0712nobodyさん
2005/06/26(日) 02:01:42ID:???これを
http://localhost/index.php/module/???/
このように
http://localhost/system/module/???/
にしたいんですがどうやってやるんでしょうか。
0713nobodyさん
2005/06/26(日) 02:05:15ID:???define('URL_FORMAT', 2)にしたら、
http://localhost/index.php/module/モジュール名/action/アクション名
でアクセスできると思うけど、
http://localhost/system/module/???/
これはどれがモジュール名でどれがアクション名?
0714nobodyさん
2005/06/26(日) 03:33:25ID:???mod_rewriteを用いるか、
いつものindex.phpをsystemとリネームしておいて
ForceTypeディレクティブまたはSetHandlerディレクティブ(PHP5)でsystemをphpとして実行してあげる。
具体的には
<Location /system>
ForceType application/x-httpd-php
</Location>
てしてあげる。
0715nobodyさん
2005/06/26(日) 04:45:27ID:???なかなかよさげだなー
Mojaviを参考にしたって言ってるから移行もしやすそう
日本人が開発してるからドキュメントが読みやすい(当たり前)
機能的にもかゆいところに手を届かせる意志を感じるし
まだ変化の途上っぽいから実働サービスに組み込むのは怖いけど
追いかけておいてもいいかもね
0716nobodyさん
2005/06/26(日) 10:00:25ID:XuuxZEhW他のActionから呼び出すためだけのActionって別に作っても変じゃないよね?
メインActionが各サブActionに仕事を発注し、Requestをこめこめして
View氏に渡すって流れなんですが。
0717nobodyさん
2005/06/26(日) 10:53:10ID:???ttp://fandc.co.jp/engine/module/catalog/action/list/
このサイトみたいにやりたいんです。
ここはindex.phpないですよね。
このサイト、エロ系だけどDB_DataObject とか使って
すげぇなーと思う。
0718nobodyさん
2005/06/26(日) 11:00:47ID:???0720nobodyさん
2005/06/26(日) 12:03:36ID:???どういう了見なんだろう?
MojaviJapanで出来たから助かったが。
0722nobodyさん
2005/06/26(日) 12:25:07ID:???意味が分からなかったのでググったところ
svnレポジトリは
ソースのサブバージョンを格納しているデータベースみたいなもんのようですが
どうやってアクセスするのですか?
0723nobodyさん
2005/06/26(日) 12:43:25ID:???WINならGUIソフトもいれれ
0724nobodyさん
2005/06/26(日) 12:48:12ID:???以前、そういう感じでやってみたが、フレームワークの中にフレームワークを作ってるんじゃなかろうか?
という疑問が沸いて、結局サイトの構成やらクラスの設計やらを大幅に見直してやめた事がある。
0725nobodyさん
2005/06/26(日) 13:14:53ID:???0727nobodyさん
2005/06/26(日) 16:12:13ID:Nq3gHHYUStrict Standards: Only variable references should be returned by reference
ってのが出まくるんですけど
これなんですか
0728nobodyさん
2005/06/26(日) 16:44:51ID:???0729nobodyさん
2005/06/26(日) 16:56:00ID:???default = "Default"
; conn2 = "MySQL"
[Default]
class = "PostgreSQLDatabase"
ここもこんな風にしたんですけどね。
mojavi/config/ConfigHandler.class.php on line 179
↑これが多いです
0730713
2005/06/26(日) 17:12:07ID:???Apacheを使ってるという前提で書くけど、httpd.confにMultiViewsを追加すればできるよ。
こんな感じで、ドキュメントルート以下でMultiViewsが有効になるようにする。
<Directory "ドキュメントルートのパス}">
Options Indexes FollowSymLinks MultiViews
・・・ 省略 ・・・
</Directory>
これなら、
ttp://localhost/index.phpがある場合、
ttp://localhost/indexでもアクセスできるようになるので、
ttp://localhost/module/catalog/action/list
というURLでアクセスできる。
0731727
2005/06/26(日) 17:18:58ID:???を
define('MO_ERROR_REPORTING', E_ALL | E_ALL);
にしたらできました。
0732nobodyさん
2005/06/26(日) 18:47:44ID:???>ttp://localhost/indexでもアクセスできるようになるので、
ここから、どのように
>ttp://localhost/module/catalog/action/listというURLでアクセスできる。
へつながるの?
実際試したの?
0733730
2005/06/26(日) 18:57:12ID:???だいたいの意味が分かればいいと思ったから、試してなかった。
×ttp://localhost/module/catalog/action/list
○ttp://localhost/index/module/catalog/action/list
0736nobodyさん
2005/06/28(火) 17:26:26ID:???(3はまだDEVなのでパス)
Mojavi式は
MとVがぶっちり断絶するから頭が整理しやすいな
0738nobodyさん
2005/06/29(水) 11:58:36ID:???URL_FORMATを2にすると、CSSやら画像やらへの相対リンクがおかしくなるから気をつけて。
0739nobodyさん
2005/06/29(水) 19:24:29ID:???国産フレームワークはまだ進化の道程というか枯れ感がないので
今まさに開発中のサービスに組み込むのは抵抗ある。
0741nobodyさん
2005/06/30(木) 12:20:21ID:???いえ、わたしは1で使ってます。
mod_rewriteを併せて使うなら問題ないと思うのですが、
714さんの紹介されているディレクティブを変更する方法「だけ」だとハマるかもしれません。
0742nobodyさん
2005/06/30(木) 15:12:57ID:???そういう経験は重要。
0745nobodyさん
2005/06/30(木) 21:36:26ID:???Smarty組み込んでテスト表示だけさせてみたけど
なんかもっさりしてる気がする
0747nobodyさん
2005/06/30(木) 23:09:16ID:???サブテンプレートを実現するみたいだが。
今作ってるなんちゃってモジャビではViewResultContainerに
各ViewResultをRENDER_VARでぶちこんで、
ボスViewがそいつらを使ってRENDER_CLIENTするようにしたが。
decorateに仕組みがわからん。
0748nobodyさん
2005/07/01(金) 00:21:44ID:???Mojaviやその他既存のフレームワーク切り捨てて作るんだから
それらを越えるもの、少なくとも同等のもの作れるんでは?
もし業務でやってるならなおさらに。
0749nobodyさん
2005/07/01(金) 11:22:05ID:???isSecure()で認証かけたページのみ全部表示されない。
ページの下の方が欠けてしまう。
こんな現象にあった方いないですか?
0750nobodyさん
2005/07/01(金) 12:27:43ID:???なんだ!?ページの下の方って!!?HTML間違って書いてるんじゃないの?
同じページでisSecureをfalseにしたらちゃんと表示されるわけ?
■ このスレッドは過去ログ倉庫に格納されています