X



【PHP】Ethna part.2【国産フレームワーク】
0001nobodyさん垢版2007/08/03(金) 08:15:18ID:BNMV6wHx
国産フレームワーク、Ethnaでいい意味で手抜きなプログラミングライフを。

Ethna -PHPウェブアプリケーションフレームワーク-
http://ethna.jp/

SourceForge.jp: Project Info - Ethna
http://sourceforge.jp/projects/ethna/

クラスドキュメント(phpDocumentor)
http://ethna.jp/doc/

前スレ
【PHPフレームワーク】Ethna【スケルトン自動作成】
http://pc11.2ch.net/test/read.cgi/php/1123070439/
0002nobodyさん垢版2007/08/03(金) 08:22:09ID:BNMV6wHx
Q. 公式のドキュメント以外にわかりやすい説明無いの?
A. LLフレームワーク本と同じ内容のモノがここに。
http://labs.gree.jp/Top/Document/20060707.html

Q. CSRFとかの対策は?
A. プラグインが同梱されてる。自動でやっちゃう方法もあるよ(by haltタソ)
http://project-p.jp/halt/anubis/blog_show/645

Q. 何これ、EUC-JPなの?
A. 特定のプロジェクトだけ他の文字コードにしたいなら
http://d.hatena.ne.jp/riaf/20070627/1182941891

EthnaをまるごとUTF-8で使いたいなら
http://blog.c--v.net/2007/07/16/1

Q. ActionFormを書くのがかったるい
A. http://as-roma.com/ethna/formBuilder/
0004nobodyさん垢版2007/08/04(土) 17:47:54ID:???
既存EthnaをUTF8にする方法(その2)

$ethna_dir= '/usr/local/bin/lib/Ethna'; //Ethna本体が入っているディレクトリを指定する
$pattern = $ethna_dir.'/*';
$files=glob($pattern);
while(count($files) > 0){
  foreach($files as $file) {
    conv_file($file);
  }
  $pattern.='/*';
  $files=glob($pattern);
}
function conv_file($file) {
  global $ethna_dir;
  if(is_dir($file)) return;
  $body = file_get_contents($file);
  if(stripos($body, 'EUC-JP')){
    if($file!=$ethna_dir.'/class/Ethna_SmartyPlugin.php'){
      $body=str_ireplace('EUC-JP', 'UTF8', $body);
    }
  }
  $body = mb_convert_encoding($body, 'UTF8', 'EUC-JP');
  file_put_contents($file, $body);
}
0006nobodyさん垢版2007/08/19(日) 22:21:51ID:???
             o
             /  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ /
            / Web1.0時代を担った   /
           / このフレームワークは無事に /
           / 開発を終了致しました  /
          / ありがとうございました  /
          /                /
         /    モナーより      /
         / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄/
  ∧_∧  /                /∧_∧
 ( ´∀`) /                /(´∀` )
 (     つ               ⊂     )
 | | |                   | | |
 (__)_)                  (_(__)
0007nobodyさん垢版2007/08/20(月) 02:13:10ID:hkP4IXYg
Ethna3マダー?
0008nobodyさん垢版2007/08/26(日) 21:14:01ID:3CqBNeOx
こんにちは。最近になってethnaを使い始めた者です。

ethna上でsmartyのdebugging consoleをONにしたい場合は
どうすればいいのでしょうか?

テンプレートに渡されている値が知りたいのです。
しょうがないので今はtemplate内で{debug}と書いて
確認してます。
0009nobodyさん垢版2007/08/26(日) 22:28:04ID:???
Ethna_Renderer_Smartyを書き換えるか
APPID_ViewClassあたりに加えておけば?
0010nobodyさん垢版2007/08/27(月) 17:44:17ID:JOZKKR6F
APPID_ViewClassにおいて

$renderer->engine->debugging = true;

としたら動きました!
ありがとうございます。
0011nobodyさん垢版2007/08/29(水) 18:09:54ID:d9IxmgRc
質問させて下さい。
環境:Redhat + Apache + Ethna2.3.2 + PHP5.2.3 + PostgreSQL7.4.17
この環境でWEB+DBの状態です。

EthnaからDBに接続する際に以下のエラーが出ます。
(ERR): Ethna_DB_PEAR.connect(class/Ethna_Backend.php:411): DB接続エラー: [DB Error: connect failed] ** pgsql(pgsql)://dbuser:PASSWORD@tcp+localhost/testdb?new_link=1 [ERROR CODE(2)]

dsnの設定は
'dsn' => 'pgsql://dbuser:password@localhost/testdb',
となっております。pg_hba.confの設定確認の為に、
該当マシンにtelnetで接続し、postgresユーザーにて
psql -u testdb の問いでuser:dbuser pass:password
とすると接続する事が出来ます。
考えられうる原因はどのような物でしょうか?
0013nobodyさん垢版2007/08/29(水) 21:58:30ID:???
>>12
11です。
Apache(PHP,Ethna)から見て、同一マシンにインストールした
DBに接続する為、localhostで問題ないのかと思っておりました。
この認識は間違っているのでしょうか?
確認の為、サーバのIPアドレスを指定してみましたが、結果は同じエラーでした。
的外れな事を言っていたら申し訳有りません…。
0014nobodyさん垢版2007/08/30(木) 00:48:46ID:???
confiureとか、phpinfoの情報さらしてみれば?(可能な限り)
0015nobodyさん垢版2007/08/30(木) 03:24:32ID:???
>>13
つーーか。Ethnaどうこう言う以前に、普通にpg_connectしてselectできるのかと。
0016nobodyさん垢版2007/08/30(木) 11:41:22ID:???
>>14,15
11です。ありがとうございます。
15様の仰る通り、pg_connectしてみた所、以下のエラーが発生しましたが
Warning: pg_connect() [function.pg-connect]: Unable to connect to PostgreSQL server: could not connect to server: Connection refused Is the server running on host "localhost" and accepting TCP/IP connections on port 5432?
お陰様で、エラーメッセージがより直接的になった為、これを調べたところ
pg_connect("dbname=testdb user=dbuser password=password")
の形で(host指定外し)行ける事が判明しました。全くEthna関係なかったです。大変申し訳有りませんでした…。
もう少し詳細に調べ、pgsql/data/postgresql.confのtcpip_socket = trueを変更する事で
host指定も可能なようですが、localhostから以外は接続しないため、これは設定しない形で終えました。
解決の糸口を下さった方々に感謝致します。本当にありがとうございました。
0017nobodyさん垢版2007/08/30(木) 15:25:18ID:???
>>16
あっ。俺もその問題なったよw
違うフレームワークだけどさ。
同じようにlocalhostはずしたら動いた。
0018nobodyさん垢版2007/08/30(木) 16:02:13ID:???
localhostだとUnix Socket経由で接続しにいくけど、127.0.0.1だとTCP/IPで
つなぎに行くからな。

Ethna関係なしsage
0019nobodyさん垢版2007/09/09(日) 00:35:07ID:R9DBCM/b
しかしethnaは開発続けていく気があるのだろうか。
最近更新が少ないよね。

まあGREEで使用されているからGREEが潰れないうちは
開発続けていくんだろうけど。
0020nobodyさん垢版2007/09/09(日) 00:58:35ID:???
何も予備知識無くて質問するけど、ethnaってPEARがいるそうだけど、
レン鯖にPEARが入ってない場合、どうすればいいの?
0022nobodyさん垢版2007/09/09(日) 01:19:37ID:???
PEARがなくても動くCakePHPにしたよ。
0024nobodyさん垢版2007/09/09(日) 11:40:17ID:???
>>23
これはw
Ethnaで運用してたらEthnaの穴と思われたけど
Pukiwikiで運用してるからセキュリティホールのそしりは免れたね
0025nobodyさん垢版2007/09/09(日) 11:45:09ID:???
単に凍結してなかったから編集されただけだろ。
ロボットに釣られんなよ。
0026nobodyさん垢版2007/09/12(水) 07:43:28ID:???
AppObject周りをがっつりレビューしてるサイトないかなぁ
ORM初めて何でなかなかコツが掴めない
0027nobodyさん垢版2007/09/12(水) 10:00:03ID:???
AppObjectはコミッターの人たち使ってないらしいからな・・
itohさんとかriafさんとかのブログでいくつか記事があるかな。
0028nobodyさん垢版2007/09/12(水) 23:01:07ID:???
そうなのか。

そのブログ当たってみます
ありがとう
0029nobodyさん垢版2007/09/13(木) 02:43:53ID:k28u4udr
Ethnaの長所って、「コードが全部読める範囲」って言うとこだと思う。
コードも相当きれいだし、読みやすい。


SymfonyとかcakePHPとか、確かになんでもできるんだろうけど、
フレームワーク病に掛かりやすい。RoRのレールを外れた時の
ものすごい無力感に似た感じで。

あと、軽いね。F.W自体のベンチって難しいけど。


だから、Ethnaをベースにオレ的汎用コードを少しずつ加えていって
割と資産を作りやすい。あくまでオレ的汎用なんだけど。


まぁ、自分の本業がいわゆるホームページ制作だからだけど、
2年Ethna使って「これできない!」ってことなかったし、
使い続けて良かったと思うことは多いな。
0030nobodyさん垢版2007/09/13(木) 02:45:30ID:???
>>28
自分も相当AppObject/AppManagerは使ってるから分からなかったら
ここで答えるよ。
0031nobodyさん垢版2007/09/13(木) 07:49:48ID:???
何々がわからないって質問できるほど理解してないだなこれが

例えば、
user {
 id primary
 name
 gid
}
group {
 id primary
 name
}
user_group_link {
 uid
 gid
}
って3つのテーブルがあるとしてMySQL、MyISAMなDBな場合に
ユーザ一覧→ユーザ個別修正
グループ一覧→グループ個別修正
の4つの画面を作るとしてその中でどんな感じでAppObject/AppManagerを使えばいいのかを
ざっくり書いて貰えると嬉しいにょー
一覧にuser.nameでのlike検索とか付ける場合どんな感じでAppManagerを
使えばいいかとか、joinするときはAppObjectを合成してほげほげとかもあると最高
0032nobodyさん垢版2007/09/13(木) 18:53:31ID:???
riafさん優しすぎるwwwww
0033nobodyさん垢版2007/09/14(金) 03:30:34ID:???
riafさん、ありがとう。
join編期待してあす。

テーブルの項目名に日本語を使いたいので
ちょっとアレして↓な感じで遊んでみます。
// Ethna_AppObjectをSmartyに渡すとMemory使いすぎで怒られる
// ので怒られないようにヘルパーを入れてみる
// AppObject::getMinimal() とか作ってそこで生成した方が
// よいかも知れない
class APPID_MinimalAppObject {
 var $prop;
 function APPID_MinimalAppObject(&$obj) {
  // AppObjectからハッシュをゲッツ
  $this->prop =& $obj->prop;
 }
 function get($key) {
  return $this->prop[$key];
 }
}
  if($diary->isValid()){
   //あったとき
-   $this->af->setApp('diary', $diary->getNameObject());// テンプレートで{$app.diary.body}とかで取得できるようになる
+   $smarty =& $this->backend->ctl->getRenderer();
+   $helper =& new APPID_MinimalAppObject(&$diary);
+   $smarty->assign_by_ref('diary', &$helper);
  } else {
   //無いとき
  }
お目汚し失礼しました。
003430垢版2007/09/14(金) 03:44:54ID:???
>って3つのテーブルがあるとしてMySQL、MyISAMなDBな場合に
> ユーザ一覧→ユーザ個別修正

典型的なパタンだね。
俺の場合一覧と個別は、
action/Admin/User.php
action/Admin/User/Edit.php
action/Admin/User/Edit/Conf.php
action/Admin/User/Edit/Do.php

view/Admin/User.php
view/Admin/User/Edit.php
view/Admin/User/Edit/Conf.php

って作る。
actionとしては上から、
・ユーザー一覧
・ユーザー登録(編集)
・ユーザー登録編集確認
・ユーザー登録実処理

で、
view/Admin/User.php
でユーザー一覧表示させるためのリストを作るけど、一覧データを持ってくるのは
User.phpでは基本的には1行(PHP4なら2行)
preforwardで
$this->af->setApp('user', $this->backend->getManager('User')->getUserList());
って書く。
PHP4だと、これできないから
$user_m =& $this->backend->getManager('User');
$this->af->setApp('user', $user_m->getUserList());
003530垢版2007/09/14(金) 03:45:29ID:???
このとき使ってるのがAppManager
AppManagerは、デフォルトで使うもんとすると
PROJECTID_UserManager.php に
PROJECTID_UserManager extends Ethna_AppManager
ってできてる。これをインスタンス化してよんでるのが
$this->backend->getManager('User')

だから、PROJECTID_UserManager.php に
PROJECTID_UserManager::getUserList()
を作成する。

で、これの中身で一番シンプルなのは
function getUserList()
{
return $this->getObjectPropList('User');
}

帰ってくるのは配列で、1つ目の要素は検索した全ユーザーのリスト。2つ目の要素は、ユーザー情報を配列で。
まぁ、素直にvar_dumpすればわかる。
003630垢版2007/09/14(金) 03:46:35ID:???


実際はこれだけだと意味がないんで、
function getUserList($name)
{
}
とかして、$nameに部分一致なUserのリストを返すようにする。このとき使うのはEthna_AppSearchObject
具体的には
function getUserList($name)
{
$filter = array('name' => new Ethna_AppSearchObject($name, OBJECT_CONDITION_LIKE));
return $this->getObjectPropList('User', null, $filter);
}
ってする。

IDの逆順にしたい!というときもあるかと思う
ORDER BY ID DESC, NAME ASC とかしたい場合もあると思う。その場合は
function getUserList($name)
{
$filter = array('name' => new Ethna_AppSearchObject($name, OBJECT_CONDITION_LIKE));
$order = array('id' => OBJECT_SORT_DESC, 'name' => OBJECT_SORT_ASC);
return $this->getObjectPropList('User', null, $filter, $order);
}
ってやる。
003730垢版2007/09/14(金) 03:47:13ID:???
さらに、
LIMIT 10,20
ってやりたい場合は、
function getUserList($name, $offset, $limit)
{
$filter = array('name' => new Ethna_AppSearchObject($name, OBJECT_CONDITION_LIKE));
$order = array('id' => OBJECT_SORT_DESC, 'name' => OBJECT_SORT_ASC);
return $this->getObjectPropList('User', null, $filter, $order, $offset, $limit);
}
って感じ。


とりあえず、Ethna_AppManager::getObjectPropListを覚えておけば9割くらい
AppManager使えることになる。
本当は、getObjectPropListの返り値がEthna::isError()でエラー起こしてないか
チェックするんだけど。
003830垢版2007/09/14(金) 03:48:27ID:???
AppObject使うのは、
action/Admin/User/Edit/Do.php
だけだな。

AppObjectは、MySQLのテーブルデータの1ラインそのものだと思ってもらってかまわない。
それがORM。

なので、新しくユーザーを追加したい場合は、データが空のAppObjectを一つ作る
PROJECTID_Action_AdminUserEditDo::perform();で
function perform()
{
$user =& $this->backend->getObject('User');
}
ってやる。これだけだとまだ追加してないので何も起こらない。
そこで$userに、データを詰め込む。これはActionFormとの連携で
function perform()
{
$user =& $this->backend->getObject('User');
$user->importForm(OBJECT_IMPORT_IGNORE_NULL);
}
これで、適切に設定してればフォーム値がそのままAppObjectに入る。
003930垢版2007/09/14(金) 03:49:19ID:???

まだDBには追加されてない。最後に
function perform()
{
$user =& $this->backend->getObject('User');
$user->importForm(OBJECT_IMPORT_IGNORE_NULL);
$user->add();
}
で終わり。

新しくユーザーを作るんじゃなくて、既存ユーザーの編集なら
function perform()
{
$user =& $this->backend->getObject('User', 'id', $id);
$user->importForm(OBJECT_IMPORT_IGNORE_NULL);
$user->update();
}
で終わり。最初の行で、id=$idのユーザーデータを持ったAppObjectが取れる。
ただ、この場合は、確実にid=$idのレコードが存在して、取れているかを
確認するために
function perform()
{
$user =& $this->backend->getObject('User', 'id', $id);
if ($user->isValid()){
$user->importForm(OBJECT_IMPORT_IGNORE_NULL);
$user->update();
}
}
ってやって、有効性を確認する。


004030垢版2007/09/14(金) 03:50:25ID:???
で、AppManagerからAppObjectを一括取得して、一括Updateとか掛けたい場合は、
Ethna_AppManager::getObjectListを使う。getObjectPropListは配列を返したけど、
getObjectListは第二引数がAppObjectを要素に持った配列になってる。当然getObjectPropListより重いよ。
004130垢版2007/09/14(金) 03:52:06ID:???
間違えた
>getObjectListは第二引数がAppObjectを
getObjectListは返り値の2つ目の配列がAppObjectを
004226,33垢版2007/09/14(金) 07:57:02ID:???
おお、ありがとうございます。
週末試しまくります。
ありがとうありがとう。
0044nobodyさん垢版2007/09/21(金) 02:13:40ID:???
誰かurlhandlerを解りやすく説明して・・・・
0045nobodyさん垢版2007/09/25(火) 15:30:02ID:???
セッションオブジェクトからセッションIDって取得出来るんでしょうか?
0047nobodyさん垢版2007/09/25(火) 19:42:56ID:???
>>44
そもそもが分かりやすくないので俺にはミリでした。
が、
http://ethna.jp/ethna-document-dev_guide-urlhandler.html
に加えて、はまりどころ
・www/index.phpに$_SERVER['URL_HANDLER']を忘れない
・AppID_UrlHandler.phpに_getPath_Hogeを忘れない。
・pathが被る場合は順番に気をつける
例:
var $action_map = array(
'hoge' => array(
'archive' => array(
'path' => 'archive',
...(snip)...
),
'archive_recent' => array(
'path' => 'archive/recent',
...(snip)...
),
とすると、'path' => 'archive'が先にマッチして'path' => 'archive/recent'まで見てくれない。
$action_mapはforeachでループしてるだけなので順番がまずいとまともに動かない。
pathとpath_regexpは、複雑なマッチを配列上で優先させること。

・path_extが要らない場合でも'path_regexp'と配列の個数を合わせる。
'path_regexp' => array('|^hoge$|', '|^hogehoge$|'),なら、
'path_ext' => array(array(), array()),としておかないと動かない(っぽい)。
アクションをサイト直下(http://example.com/とか)にマップする場合は'path_ext'=>array(),で。
0048nobodyさん垢版2007/09/25(火) 19:49:41ID:???
Ethna_Sessionは
setcookie($this->session_name, "", 0, "/");
の行全部を
list(, $path, $domain,) = session_get_cookie_params();
setcookie($this->session_name, '', 0, $path, $domain);
に変えておくと
session_set_cookie_params(1200, '/admin/', '', true, true);
とかエントリポイントで指定できて便利とか。
0049nobodyさん垢版2007/09/27(木) 17:12:13ID:???
ある入力画面で、マスタの数によってINPUTの数が変わる画面があるんですが、
アクションフォームの定義の仕方がわかりません
$_POST等を直接弄るしか無いんでしょうか・・・
005149垢版2007/09/28(金) 09:27:35ID:???
うほ、ありがとうございます!
アクセスさえ出来ればあとはどうにでもなりますね
もしくはマスタ数に上限を設けて、requiredがfalseなフォーム値を
上限分書いて逃げようと思います
0052nobodyさん垢版2007/10/01(月) 21:54:03ID:???
Ethnaにアバター機能が付くと聞いて飛んできましたw
0053nobodyさん垢版2007/10/05(金) 03:08:42ID:???
>>47
d
規制で書けんかった(´・ω・`)

php5ならいちいさんが書いてる
Net_URL_Mapperを使ったプラグインがよさげなんだがなぁ・・・

ところで、UrlHandlerで設定した値ってもうちょっと簡単に取得できないもんなんだろうか・・・
AFに定義しないと取得できないってめんどい・・・・
0054nobodyさん垢版2007/10/05(金) 18:13:07ID:???
基本的にindex.phpのみでテンプレートを切り替えて
アクションをPOSTして動かしていくイメージで作っていたのですが
当然ですが、アクセスログを見ても全てindex.phpになっているため
画面毎に固有のURLを割り振りたいと考えています。

イメージとしては、 入力画面 -> 確認画面 -> 完了画面
のそれぞれに固有のURLを割り振る方法を模索しています。
入力画面:index.php?code=input
確認画面:index.php?code=confirm
完了画面:index.php?code=finish
と言うレベルでも付与出来るならば問題無いのですが、アクションをPOSTしながら
URLに変化を付ける方法が分かりませんでした。

素直にGETで渡すしかないのでしょうか?
0055nobodyさん垢版2007/10/05(金) 18:22:49ID:???
>>54です。
書いた直後に気が付いた…。
これなら普通に<form action="index.php?=***">で渡せば良いやと言う事で…
スレ汚し、大変失礼致しました。
0056nobodyさん垢版2007/10/06(土) 01:24:36ID:???
>>54
<input type="hidden" name="action_*">
とか
<input type="submit" name"action_*" value="じっこ〜">
とかname属性に入れれば良い

ここらへんはEthnaのチュートリアルにあるよ
0057nobodyさん垢版2007/10/11(木) 16:33:35ID:???
smartyのincludej関数を使って、ヘッダー部やフッター部を別ファイルにしたいのですが
それ様の格納フォルダみたいなものってないのでしょうか?もしくは何か良い方法あれば
お願いします
0058nobodyさん垢版2007/10/11(木) 17:31:02ID:???
>>57
テンプレートディレクトリの中に好きなようにディレクトリ作って突っ込めばいいですよ。
0059nobodyさん垢版2007/10/25(木) 15:41:25ID:1vHLTuW2
ログの出力をなんでもいいから全部ファイルに出力したいときはどうするのん?
0060nobodyさん垢版2007/10/25(木) 16:15:34ID:???
'log_facility'          => 'file',
'log_level'             => 'debug',
0061nobodyさん垢版2007/10/25(木) 23:58:03ID:???
おお、ありがたい

ちなみになんだけど
Ethna_Controller の getManagerClassName と getObjectClassName 。
微妙に名前の変換ロジックが違う
CVS版だと同じになってんのかな?
0063nobodyさん垢版2007/10/31(水) 13:59:03ID:G97Omn6y
EthnaのADODBって Starttrans() 使えないのかな?トランザクション。
0064nobodyさん垢版2007/10/31(水) 15:51:24ID:???
直接
$this->db->db->StartTrans();
って呼べば使えたと思う
0065nobodyさん垢版2007/11/01(木) 14:26:56ID:???
>>63-64
いやいや、PEAR_DB版でもADOdb版でも、トランザクションは
$this->db->begin();
$this->db->rollback();
$this->db->commit();
で統一されてるよ。
0066nobodyさん垢版2007/11/01(木) 15:16:48ID:???
Ethna_DB_ADOdb.phpだとbegin()で単にBeginTrans()を呼んでるだけだけど、ADOdbのStartTrans()ってBeginTrans()より色々とよきに計らってくれるんですよ
/**
 Improved method of initiating a transaction. Used together with CompleteTrans().
 Advantages include:
             
 a. StartTrans/CompleteTrans is nestable, unlike BeginTrans/CommitTrans/RollbackTrans. Only the outermost block is treated as a transaction.
 b. CompleteTrans auto-detects SQL errors, and will rollback on errors, commit otherwise.
 c. All BeginTrans/CommitTrans/RollbackTrans inside a StartTrans/CompleteTrans block are disabled, making it backward compatible.
 */
function StartTrans($errfn = 'ADODB_TransMonitor')
{....
006765垢版2007/11/01(木) 18:02:36ID:???
ぐあ、StartTrans()のことは知らなかった。ごめん、typoかと…orz
CompleteTrans()でエラーを自動判定したり、トランザクション中に
別のメソッドでcommitされても大丈夫というのは便利ですね。
ADOdbの独自拡張ぽいから、Ethna_DB_ADOdb.phpを拡張するか、>>64氏の
書いたように直接呼ぶのが良さそう。

# ドキュメントに「毎回エラーチェックする必要ないよ」て書いてあるのは
# 無駄にSQLの実行回数が増えてしまうので微妙な気もするけど…
0068nobodyさん垢版2007/11/01(木) 23:50:53ID:???
詳しい人おしえて、

Ethna使ってて actionに書くべきか viewに書くべきか迷うんだが、

例えばactionで
AppManager使って必要なデータ取ってきてたとして
ついでに af->set()で出力のお膳立てもしてしまった方が楽に感じるんだが、

あえて、どこかに溜めておいてview側でaf->set()すべきなのかね?
0069nobodyさん垢版2007/11/02(金) 00:16:52ID:???
>>68
actionformのsetはactionclassのperformに入る前の段階
つまり、authenticateとprepareで行うべき。

viewでやるのはもってのほか。

AppObject/AppManagerなどのModelにも極力行かすべきではない。


というルール付けでやってMVC意識してる。
007068垢版2007/11/02(金) 00:42:53ID:???
>69 Ethna使わないでください。
007169垢版2007/11/02(金) 01:00:21ID:???
>>70
どういうこと?
0072nobodyさん垢版2007/11/02(金) 15:32:51ID:???
>>68
その辺はMVCのジレンマだと思う。
効率的には、Actionで取得した情報をViewで使えるのがいいけど
特定のActionを通過しないとView側で正しい情報を利用できない
となると、処理と表示が分離されないことになるから微妙。

自分は多少無駄だとは思いつつも、ActionとViewでそれぞれ取得
しているよ。結果をキャッシュできるものはキャッシュしたり、memcachedを
使ったりして、DBの負荷は上げないように少し考えてはいるけど。
007369垢版2007/11/02(金) 17:06:05ID:???
>>72
それ af->setApp() するときだよね?
>>68 は、af->set()って書いてるから、フォームの値を調整したいんだろ?
そう思って>>69 の書き込みなんだが。

> 自分は多少無駄だとは思いつつも
AppObjectはキャッシュ持ってるから一回取りに行った値は保存してる。
なんでAppObject使ってやればActionで判定にとった値をViewで
使いまわしてもDBには行かない。

その辺はORMの仕事じゃないかとも思うけど。
007568垢版2007/11/02(金) 23:44:12ID:???
ごめん af->setApp()のこと。。。orz >69

MVCの切り口でいくと
やはりそうなるんですかね。>72 >73

キャッシュされているにせよ
viewでもう一回AppObject取り直して
af->setApp()を数行書くってのも、たいそう無駄な気がしてます。

結局どんなAppObjectが渡って来るか
view自体知ってなくてはならない訳だし、

俺の場合描画上の小細工はSmartyのテンプレートにやらせる事が
多いんで、
それだったら、set()とかsetApp()ひっくるめて、
ActionForm全体を渡すから、viewさんあとは描画よろしく。
って方が潔い気がしてます。

Ethnaは viewの定義省略できるんだし、
ワザワザ2,3行だけのViewのファイル作らなくても良いかなと
思ってる。

こういうのMVC的にはダメなのかな。
007669垢版2007/11/03(土) 00:15:59ID:???
>>75
とりあえず1分でも早いことコーティング終わらせたい!
って時は、確かにViewレスにしてperformでsetAppする。こともある。

前はそうやってたけど、最近面倒でもviewつくるようにしてる。
まぁ、1分かからんでしょ。

理由は2つあって、ひとつは、結局あとから追加仕様が加わった時に
viewがあるとそこに流し込めば良いという意識でAction作ってしまえる。
viewを造ってないと、結局違うActionに同じsetAppするようになる。
ある意味、そっちの方が絶対使い回しできない。

もうひとつは、forwardをいじりたい場合。
view/Subview.php
view/Subview/Draw.php
view/Subview/Draw/Finish.php
ってする場合、APPID_View_Subview::forward()に仕掛けをしてやって
テンプレパス変えたりする場合、クラス定義だけでもしておけばそれ以下の
viewもよろしくやってくれるけど、viewを定義しないとControllerで設定した
view使っちゃうからな。まぁ、特殊な場合だけど、forwardいじれるのは強力だからな。
007769垢版2007/11/03(土) 00:29:22ID:???
>>75
>キャッシュされているにせよ
>viewでもう一回AppObject取り直して
>af->setApp()を数行書くってのも、たいそう無駄な気がしてます。

なんで、オレの場合はできる限りAction/Viewの行数を増やさないように
Modelにほとんどのコードが移動した。
AppObject/AppManagerのキャッシュを利かせるには、
同じfilter/offset/limit/orderでDBからfetchさせる必要があるから。
すると、ActionとViewでぶれがあるといけないからな。

だから、全体の流れとして必然的に
[Action]
ActionFormの調整(デフォルト値や、セレクトタブの値生成)
  ↓
af->validate()
  ↓
落ちるView先の決定ロジック

[View]
af->setApp()
のみ

ってなる。
007868垢版2007/11/03(土) 01:16:56ID:???
>>76
>もうひとつは、forwardをいじりたい場合。
これは分る。確かにforwardいじりたい時もある。

>viewを造ってないと、結局違うActionに同じsetAppするようになる。
>ある意味、そっちの方が絶対使い回しできない。

そうかなー。viewを作ってあったにせよ、viewに渡すものが抽象化
しきれてなければ、結局使い回せない気がする。
一番抽象的で、どんなviewでも理解できるもの、つまりはActionFormを
渡すというお約束が、ゆるくて最強の接点だと思うんだが。
007968垢版2007/11/03(土) 01:33:38ID:???
>>77
>AppObject/AppManagerのキャッシュを利かせるには、
>同じfilter/offset/limit/orderでDBからfetchさせる必要があるから。

勉強になります。
008069垢版2007/11/03(土) 02:54:08ID:???
>>78
>渡すというお約束が、ゆるくて最強の接点だと思うんだが。
その辺は、開発スタイルとか案件に依るんじゃない?
取りあえず「オレはこういう感じでやってる」ってだけで、別に色々な方法があると思う。
使ってるうちに変わるだろうし、ってオレがそうなんだけど。

そのへんのゆるさはEthnaのいいところだし、一人や数人でやる分には気楽。
0081nobodyさん垢版2007/11/03(土) 15:20:42ID:???
みんな、AppObjectというかORM使ってるのか。
俺はjoinのやり方が分からなくて涙目だったので、いまだにSQL書いてるよ。
ZnedFrameworkも試してみたけど、Zend_Db_Tableが全然使えないので
結局そっちもSQLというチンカスっぷりだぜ。
0082nobodyさん垢版2007/11/03(土) 16:01:56ID:???
joinは少し前まで、まともにできなかったはず。
なんで漏れもSQL書いてるよ。AppObjectはテーブルのレコードと1対1でやり取りする場面だけ
使ってる。検索して一覧引っ張ってくるようなケースは、joinする場合が多いし、
where文SQLで書く方が慣れているんで、SQL書いた処理をAppManagerに詰め込んでるよ。
0083nobodyさん垢版2007/11/05(月) 13:41:20ID:???
view作ってwhere条件だけEthna_AppSearchObjectで作るってのはナシ?
もっとも、それやった香具師がMLで「table読むときはカラム名小文字になるのに、viweを読むと大文字になる。がっでむ!」と言っていたので、あまりお勧めではないのかもしれん。

……S2EthnaでS2Dao.PHPか?w
0084nobodyさん垢版2007/11/07(水) 18:33:33ID:NnNW38Hz
http://ethna.jp/ethna-document-dev_guide-app-sjis.html

> 入力のShift_JISを内部コードに変換
> まずは、Ethnaのフィルタで入力コードを変換してしまいます。

とあるのですが

/usr/local/lib/php/Ethna/class/Ethna_Filter.php

この中に書き加える訳ではないのですか?

上記で駄目だったので、APPID_Filter.php を以下のように書いて

class APPID_Filter extends Ethna_Filter{
{
  function prefilter(){・・・}
  function InputEncoding($data){・・・}
}

APPID_Controller.phpでrequire onceしてみたりしたのですが
$_POSTされたデータが変換されなくて悩んでます。

どなたかご教授ください。よろしくお願いします。
0085nobodyさん垢版2007/11/07(水) 18:36:31ID:???
APPID_Filter.php の prefilter() は preFilter() の入力ミスです。
0086nobodyさん垢版2007/11/08(木) 01:13:51ID:Wm9UgOj0
だれかAppManagerのgetAttrListの使い方わかる人いませんか?

これがいまいちわからないのです。フォームヘルパでセレクトボックスのoptionの値を
データベースから取得したいと考えてまして。

Ethnaの開発マニュアルみていたら、アクションフォームで
Optionの設定を'address,prefecture'に書けば見たいな事わかったんですが、、
プロパティの値ってのがよくわからないんです・・・


だれかわかる人教えてください。

0087nobodyさん垢版2007/11/08(木) 02:07:11ID:???
Hogeマネージャの関数から
同マネージャ内の別関数(fuga)を呼び出したい場合、
以下のどちらが適しているでしょうか?

$Hoge_m =& $this->backend->getManager('Hoge');
$Hoge_m->fuga();
or
$this->fuga();

0088nobodyさん垢版2007/11/08(木) 02:29:21ID:Wm9UgOj0
>87
$this->fuga();

008986垢版2007/11/08(木) 02:56:20ID:???
ありがとうございます!!

もう一点非常に疑問点があるのですが、
$Hoge_m =& $this->backend->getManager('Hoge');

$Hoge_m = $this->backend->getManager('Hoge');
ってどう違うのでしょうか?
この&って参照渡しでしょうか?
参照渡しって単なる変数だけでなく、オブジェクトに対しても
利用可能なのでしょうか?

0090nobodyさん垢版2007/11/08(木) 16:06:31ID:???
>>89
http://www.php.net/manual/ja/language.references.php
参照はスカラー型でもオブジェクトや配列でも使えるよ。

余談だけど、PHP5以降では関数の戻り値や変数への代入なんかで
同じオブジェクトを指し示している必要がないのであれば、参照渡しを
するべきではないので注意。メモリの効率化とか思っていると、むしろ
無駄に消費されることがある。
http://www.phppro.jp/news/304

PHP4/5に対応するEthna(本体)には関係ない話だけどね。
0091nobodyさん垢版2007/11/11(日) 12:12:44ID:???
このフレームワークって他のフレームワークにあるような
AjaxヘルパやHTMLヘルパーなんかは装備されないんでしょうか?
あと、ルーティングをもう少し改善して欲しいですな。
0092nobodyさん垢版2007/11/12(月) 15:41:42ID:???
スマートURLを使えるようにするにはapacheの方も色々設定しないと駄目?
0093nobodyさん垢版2007/11/13(火) 01:26:05ID:41cf2n7r
PEAR::Authを継承したAuthクラスをこさえてみようかと思ったんだが、
構築するタイミングがわからない

ActionForm辺りで
$this->auth =& new $this->backend->ctl->class['auth'](&$this->backend->ctl)
ってやってあげればいいんだべか。
Controllerのコンストラクタで構築するのはちょっくら早い感じだし
どうするとスマートなんでげしょ。
0094nobodyさん垢版2007/11/13(火) 21:54:07ID:???
>>92
まぁ、mod_rewriteの設定を行わないと駄目でしょうね。
UrlHandlerはいまひとつって感じ。
009593垢版2007/11/13(火) 23:45:08ID:41cf2n7r
ActionClassのauthenticateで生成することにすますた
0096nobodyさん垢版2007/11/14(水) 04:30:56ID:???
例外処理をしたいのですが、
AppManager 内で
throwして
アクション内でcatchしたい場合、
どのように記述すればよいでしょうか?
単にAppManager内でthrowすると
PHP Fatal error: Uncaught exception 'Exception'
がおきてしまいます
0097nobodyさん垢版2007/11/16(金) 03:14:04ID:???
>>67
エラーが発生したらトランザクション中の後続するSQLはスキップしそうだけどね
そうじゃなきゃあんまりでしょw
009867垢版2007/11/16(金) 21:30:33ID:???
>>97
いや、ソース確認したらチェックしてなかったんだよ
あんまりだ
0099nobodyさん垢版2007/11/19(月) 22:11:25ID:???
$obj =& $this->backend->getManager('hoge');
$obj->setParam( $param );
$obj =& $this->backend->getManager('hoge');
みたいな感じにすると
$obj->setParam( $param );が既になされている状態になる理由が
よくわからんです。

010099垢版2007/11/20(火) 00:55:53ID:???
参照渡しってやつのせい?
$this->backend->getManager()
をオブジェクト生成(new)と同じ感覚で使ってたけど、
もしそうなら大きな勘違いですよね。

newみたいに使う方法ってないでしょうか?
0101nobodyさん垢版2007/11/20(火) 04:03:10ID:???
>>100
そもそも、ManagerはObjectと違っていくつも作らんのよ。
だから、setParam()とかしてる時点で使い方間違ってるよ。
Objectにもたせなよ。
0102nobodyさん垢版2007/11/20(火) 07:09:01ID:???
getManager()の第2パラメータ指定すればシングルトンじゃなくなったはず。
0103nobodyさん垢版2007/11/20(火) 18:19:20ID:???
>>102
知らんかった…

それはさておき、AppManagerにsetParamする状況なんてあるっけ?
ActionForm使って、Action/View間で$this->af->setApp()/getApp()で
取りまわしたりすることはあるけど、結構イレギュラーな場合だけかな。
0104101垢版2007/11/20(火) 19:58:25ID:???
>>102
おれも知らんかった…
010599垢版2007/11/20(火) 22:31:06ID:???
>>102
サンクスです!!

>>101
>>103
マネージャを普通のクラスみたいに使ってます。。。
マネージャでクラス作ってnewする代わりに
getManagerして。。。。
だめだろうか
requireとかめんどいんだけど。
0106nobodyさん垢版2007/11/20(火) 22:39:15ID:???
102みたいな機能があるってことは
そういう使い方も想定されてるのかね?
0107101垢版2007/11/21(水) 00:34:11ID:???
うーん、キャッシュが鬱陶しいときじゃないかな?
AppManagerの同じメソッドで取りに行きたいけど、その間隙にUpdateしちゃってて、
そのままメソッドコールするとキャッシュが帰ってくるのがうっとうしいという状況。
たまにある。あまり設計がよくないせいかもしれんけど。
0108nobodyさん垢版2007/11/21(水) 03:01:24ID:???
>>105
ローダーとして使うなら、(AppId)_Controller.phpの$classに
$class = array(
 ...
 'foo' => 'Foo_Bar_Buzz',
 ...
);
みたいに定義しておいて、
$obj = $this->backend->getObject('foo');
で取得するというのはどうだろうか。第2引数にtrueを指定しないと
キャッシュされたオブジェクトが返るので注意ということで。
0109nobodyさん垢版2007/12/14(金) 00:07:12ID:qsT4Ha3J
-- actionform
'id' => array(
  'form_type' => FORM_TYPE_SELECT,
  'type' => array(VAR_TYPE_INT),
  'option' => array(1=>'man', 2=>'woman')
)

てなときに

-- viewclass
$this->af->set('id', array(1, 1, 2, 2, 1));
-- template
{form_input name="id" emptyoption=""}

ってやっても
うまくselected="selected"が付いてくれないんだけど
FORM_TYPE_SELECTで配列を扱うのは面倒くさいのかしら
0110nobodyさん垢版2007/12/14(金) 01:37:02ID:???
>>109
MultipuleのSelectタブ?
オレは自分でガッツリとform_inputを作ってしまって、Ethnaデフォルトは
もう使って無い。まぁ、面倒だけど意外と簡単ですよ。

Defaultのform_inputは対応してるのかな?
Ethna_ViewClass::getFormInput_Html
見てるとしてないね。
0111109垢版2007/12/14(金) 07:29:06ID:???
>>110
いや、マルチプルじゃなくてシングルセレクトなSelectタグの配列。
<select name="id[]"></select>
<select name="id[]"></select>
<select name="id[]"></select>
ってな感じで使いたいんです。
そうか、Selectタグでarray(VAR_TYPE_〜〜)ってやると
マルチプル扱いになるんね。
んでPOSTされたデータ上でマルチセレクトなSelectタグか
Selectタグの配列かの見分けは付かないと。。。
自分でがっつり作り込むのは面倒なので
ViewClassを継承したクラスで下のような変更加えて使ってみます。
マルチセレクトかシングルセレクトな配列か見分けが付かないのなら問題はないはず。

-- Ethna_ViewClass.php (function _getFormInput_Select($name, $def, $params))
-- 702行名ぐらい
 // default値の設定
 if (isset($params['default'])) {
  $current_value = $params['default'];
 } else if (isset($def['default'])) {
  $current_value = $def['default'];
 } else {
  $current_value = array();
 }
- current_value = array_map('strval', to_array($current_value));
+ if ($def['_form_counter'] < count($current_value)) {
+  $current_value = array_map('strval', to_array($current_value[$def['_form_counter']]));
+ } else {
+  $current_value = array_map('strval', to_array($current_value));
+ }

ありがとやんす。
0113nobodyさん垢版2008/01/09(水) 18:52:02ID:I5nTeu3F
上にログファイル出力についてあったけど
ログファイル名を固定ではなくて日付ごとに出すことってできないんですか?
今 log/app.log

log/20080109.log
みたいに。
ご存知の方いましたらお願いします。
0114nobodyさん垢版2008/01/09(水) 21:49:38ID:???
iniのログファイル名のところを文字列じゃなくて式にすればいいんじゃね?
もしくはEthna_Plugin_Logwriter_Fileあたりを継承して独自のLogwriterを作る。
0115113垢版2008/01/10(木) 15:35:23ID:???
独自で作るようにしました。
ありがとうございました。

0116nobodyさん垢版2008/01/23(水) 21:01:59ID:vMSy4RO6
おまいらさ、PHPは書けるけどEthnaなんてまるっきり知らん!って状態から
一通りEthnaでアプリ書けるようになるまでどのくらいかかった?
0117nobodyさん垢版2008/01/23(水) 21:35:59ID:???
>>116
PHP+MySQLを知らない状態、フレームワークというものが
存在するのも知らない状態から、2006/12上旬に勉強を初めて
2007/2下旬にユーザ登録型のサービスをひとつ立ち上げました。
ethnaの存在を知ったのは1月上旬だったかな?
平日昼間は別の仕事をしてたので、作業は夜+休日。

Linuxも素人だったので、むしろそっちの設定まわりで
取られた時間の方が多かったかも。
0118nobodyさん垢版2008/01/24(木) 01:44:05ID:???
S2Ethnaで、S2ContainerApplicationContext::registerAspect('/Dao$/', 'dao.interceptor'); を使って
diconファイルを作成しないでもDIできるようにしたいんですが、できた人いますか?
0119nobodyさん垢版2008/01/24(木) 14:07:43ID:???
いいから、今からEthna始める俺に使い方を教える作業に戻るんだ
0121nobodyさん垢版2008/01/27(日) 07:13:41ID:Ce0IXCjK
1,pearをapt-getでインストール
2,pearでethnaをインストール
3,pearでSmartyをインストール
4,Smarty付属のindex.phpを見る限りSmartyもPHPもちゃんと動いてる
5,HTTPで公開しているディレクトリで ethna add-project 。これもOK
6,そこをブラウザーで覗くと「Index of ディレクトリ名」とかいうメッセージが出る。
7,ethnaが作った www ディレクトリの下にある index.php を www でなく
  プロジェクトと同じディレクトリに置くと、画面真っ白。「Index of....」も出ない。


すんげー困ってます。諸先輩方、助けてくださいおながいします。
0122nobodyさん垢版2008/01/27(日) 08:14:55ID:???
index.phpのパス書き換えた?
0123nobodyさん垢版2008/01/27(日) 08:48:45ID:Ce0IXCjK
>>122
/ethnaアプリ/www/index.php のことでしょうか?
require_onceで読んでる Controller クラスを絶対パスで読んでいるので変えていません。
0124nobodyさん垢版2008/01/27(日) 23:57:46ID:???
んじゃ、apacheの設定かな。
「Index of....」が出る時点でPHP用に設定されてないんだろうし。
0125nobodyさん垢版2008/03/16(日) 23:46:07ID:M19sLUbw
開発半年でJavaをやっていてPHPのPの字も知らないのに、
今週からPHPの自社開発に引き戻されたんだが、
自分(19)より年上(45)のおじちゃんが開発経験が無いことが発覚した。
メンバーは22の開発未経験のお兄ちゃんのみ。
4末に納期....死にたいorz
とりあえず、
やさしいPHP(高橋麻奈著)
PHP+MySQL(小島まさご著)
LLフレームワークBOOKS
PEARライブラリ(佐久嶋ひろみ著)
を3日で読んだんだが、
コントローラーで
void main (string $class_name, [mixed $action_name = ""], [mixed $fallback_action_name = ""])
string $class_name: アプリケーションコントローラのクラス名
mixed $action_name: 指定のアクション名(省略可)
mixed $fallback_action_name: アクションが決定できなかった場合に実行されるアクション名(省略可)
http://ethna.jp/doc/(引用)】
string $class_name、mixed $action_name、mixed $fallback_action_nameは
どこでセットしてやればいいのでしょうか、、、orz
HTML(PHP)ソース上でどこで対応するのでしょうか?
アプリケーションIDやらformやらvalueやらnameやらidやらclassやら頭が混乱してきてしまったよ。
そしておすすめの本あったら教えてください。。。
0126nobodyさん垢版2008/03/17(月) 03:38:21ID:???
このフレームワークに未来はありますか?
0129nobodyさん垢版2008/03/17(月) 15:54:10ID:5CS1AjM2
Ethna使い始めたんですけど、Ethnaって終了してますか?
Ethna公式サイトも更新ないし...

ところで質問なんですけど、アプリケーションを通して使いたいユーザ定数は
どこで定義すればいいのでしょうか?

{APPID}_Controller.php に書けなんて事はないですよね?
0130nobodyさん垢版2008/03/17(月) 23:08:03ID:???
>>129
EthnaはGreeがある限りあるんじゃないかな
ユーザ定義は自分でファイル作って
コントローラでインクルードしてたかなぁ
0131129垢版2008/03/18(火) 09:20:11ID:ZfBa+neK
>>130
レスありがとうございます。

>EthnaはGreeがある限りあるんじゃないかな

GreeはID持ってるけど全然ログインしてない。
なんか盛り上がりに欠けるんですよね〜。

>ユーザ定義は自分でファイル作って
>コントローラでインクルードしてたかなぁ

なるほど、その手がありますね。
0132nobodyさん垢版2008/03/18(火) 09:23:30ID:ZfBa+neK
form で smartyの {html_select_date} とかを使いたいんですけど、
FORM_TYPE_DATETIMEとかでは使えないですよね?

--action-form--
$form = array(
'Year' => array('form_type' => FORM_TYPE_SELECT, 'option' => range(1900,2008),
'Month' => array('form_type' => FORM_TYPE_SELECT, 'option' => range(1,12),
'Day' => array('form_type' => FORM_TYPE_SELECT, 'option' => range(1,31),
);
--template--
{form_input name='Year'}{form_input name='Month'}{form_input name='Day'}


とかやるしかないんですかね?

0133125垢版2008/03/18(火) 13:02:00ID:???
>>128
読んでみたが画面単位でアクションクラスを作成するって把握でいいのでしょうか?
EX:
検索ボタン、登録ボタンがともに存在する画面
・生徒情報画面(生徒を検索、登録ができる)
・サークル登録画面(サークルを検索、登録する)

だったらそれぞれの画面単位でアクションクラスを作成するってことかな....



都内で詳しい方いたら相談乗っていただけると
助かります.....
ethna77@55mail.cc
0134nobodyさん垢版2008/03/18(火) 19:00:29ID:???
>>133
アクション単位でアクションクラスを
viewは必要な画面数分だけ
生徒情報一覧を出すアクション
生徒を検索するアクション
生徒を登録するアクション
サークル情報一覧を出すアクション
サークルを検索するアクション
サークルを登録するアクション

viewは
生徒情報を出すview
生徒情報を登録するview
サークルを登録するview
サークル情報を出すview
登録ありがとうview
って感じ?
0135125,133の人垢版2008/03/18(火) 20:26:02ID:???
>>134
そうなのか!
ありがとうございます。
Javaのフレームワークよりより難しいですね。

ではそのアクション単位で
アクションオブジェクトを作ればいいって把握でいい感じなのかな?
頑張って沢山ビューつくるよorz
タブ切り替えでアクションほしいとか泣きたいよ、ママー。
0136nobodyさん垢版2008/03/18(火) 20:47:52ID:???
>>135
交通費込みで金くれるなら東京までいくぜw

viewは共通化出きる所を共通化してincludeして再利用
あとactionの方の共通化はmanager等を使う

んでアクションのオブジェクト等はコントローラ側で勝手に生成してくれるので
実際に作製必要な処理などは各アクションのperformで処理を
表示関連の処理が必要な場合はviewクラス作って
viewクラスのpreforwardで処理をすればいい
0137135垢版2008/03/19(水) 01:55:57ID:???
>>136
ど こ か ら く る ん だwww
北海道とかだったら...orz
かっ身体で払います。
近辺なら出せないこともないです。
ethna77@55mail.cc

明日早速ググってみる。
親切にありがとうございます。
周りの人があまりに自分の開発でEthnaの本(サイト)見てるときは目付きがイっててこわがってる....。
客先PGなので自社のイメージなんて、
納会やら帰社日ぐらいで
若いだけで社長の隣に座らされてるから
ニコニコしてる穏やかな人だったらしい。
0138nobodyさん垢版2008/03/26(水) 00:45:59ID:???
CSVのデータって通常どこで生成するもの?
やっぱりヴュー?

抽出用のデータをアクションで受け取って、ビューに渡して出力でいいのかな?
データ量が多いとgetAllとかするとメモリオーバーで止まっちゃうからAppManager
とか使えないよね。

ViewからAppManagerを呼んでAppManagerからCSVを出力って邪道?
0139nobodyさん垢版2008/03/27(木) 16:27:33ID:???
例えば以下の様に、ラジオボタンによって入力欄のどちらを利用するかを選択させたい場合

<input type="radio" name="typeab" value="1">Aタイプ<br>
<textarea name="input1"></textarea><br>
<input type="radio" name="typeab" value="2">Bタイプ<br>
<input type="text" name="input2">

ActionForm内にtypeabとテンプレートでの{form_input name="typeab".}をスマートに書く方法ありませんかね?
結局ActionFormに普通に書いてテンプレートはradioのみ、html直書きでchecked処理は別途行なう、と言う形になってしまうんですが。
0140nobodyさん垢版2008/03/29(土) 03:19:28ID:???
>>138
>CSVのデータって通常どこで生成するもの?
>やっぱりヴュー?

そのCSVをダウンロードさせたいのか?
であれば、自分はviewじゃなくてactionだな。
ロジックはAppManagerに書くけど。


>抽出用のデータをアクションで受け取って、ビューに渡して出力でいいのかな?

View=HTML-Templateに変数を渡すだけって考えた方が良いよ。


>データ量が多いとgetAllとかするとメモリオーバーで止まっちゃうからAppManager
>とか使えないよね。

とりあえず気にするな。メモリが足りなさそうだったらコントローラの最初で
ini_set('memory_limit', '32M');
とかすれば良い。しょぼいレンタルサーバとかじゃないんだろ?さすがに。

>ViewからAppManagerを呼んでAppManagerからCSVを出力って邪道?

正解だと思う。Viewまで行く必要ないと思うがな。
0141nobodyさん垢版2008/03/29(土) 03:26:33ID:???
>>133
>EX:
>検索ボタン、登録ボタンがともに存在する画面
>・生徒情報画面(生徒を検索、登録ができる)
>・サークル登録画面(サークルを検索、登録する)

学校のコミュニティサイトでも作ってるのか?
まぁ、Ethna慣れれば↑あたりは1日あれば作れるよ。仕様とHTMLもらってればな。
頑張れ。
0142nobodyさん垢版2008/03/29(土) 03:34:30ID:???
>>139
>ActionForm内にtypeabとテンプレートでの{form_input name="typeab".}をスマートに書く方法
まず、Smartyのデリミタは { } じゃなくて{{ }} とか <{ }>にした方が良いよ。
JavaScriptとCSSで { } よく使ってうっとうしくなるから。


確かに、Ethnaデフォルトのフォームへルパはあんまりできが良いとは思えない。
ActionForm自体は良いんだけど。

<input type="radio" name="typeab" value="1">Aタイプ<br>
<textarea name="input1"></textarea><br>
<input type="radio" name="typeab" value="2">Bタイプ<br>
<input type="text" name="input2">

は、自分だとEthnaのテンプレートでは
<{form_input name="typeab" value="1" id="uki1"}><br>
<{form_input name="input1" attr="id='hoge1'"}><br>
<{form_input name="typeab" value="2" id="uki2"}><br>
<{form_input name="input2" attr="id='hoge2'"}><br>
ってやる。Smarty関数form_inputは全部自作。

で、これらのFormにはIDを振っておいてあとでJavaScriptでこっちのラジオ選択したら
こっちのテキストエリアが書き込みできて、あっちのテキストエリアは
書き込み負荷にして・・・とかやるます。IDつけときゃ、とりあえずあとでJavaScriptで何とかなる。

どうせ入力補佐的なことがしたいんでしょ?
0143nobodyさん垢版2008/04/08(火) 21:52:44ID:???
最初にController内でちょっとした計算をしたとして、その値を再度ActionClass内で使いたい場合ってどこに置いておけばよいんでしょうか?
sessionに置くのが素直なんでしょうけど、それ以外だと手軽な手はありませんかね?
0144138垢版2008/04/17(木) 18:27:49ID:LCosruMP
>>140
サンクスコ
action=>AppManagerでCSV出力で対応することにしました。


smartyの html_select_dateのようなヘルパは用意されていないですよね?
なさそうなのでなるべく本体に修正を入れないように {APP_ID}_ViewClassで
オーバーライドして作ったけど、なんかスマートじゃないですけど、何かいい
方法ありますか?


あと、検索フォームなど複数の画面で共通して使いたいフォームはどこで定義
するのが正解ですか?
今は{APP_ID}_ViewClassに
function addQueryForm(){
$this->af->form = array_merge($this->af->form, array(〜));
}

なんて書いていて、{APP_ID}_ViewClass::preforward() から呼んでます。
FormClassに書くべきなのでしょうか?
0145nobodyさん垢版2008/04/17(木) 18:34:38ID:LCosruMP
Viewに書いたのには

1.フォームを表示するための処理なのでView
2.受け取るフォームは1画面なのでActionClassなどでやるべきじゃないよね?

と、一応 私なりの理由があるのですが、フレームワークの作法的にはどうする
のが正解なのでしょうか?
質問ばかりですみません。
0146nobodyさん垢版2008/04/18(金) 17:41:26ID:???
つーかEthnaってもう終ってます?
0147nobodyさん垢版2008/04/18(金) 17:46:41ID:???
まあ環境が自由でこれから新規で何か作ろうという時に使うもんではないな
0148140垢版2008/04/18(金) 18:13:47ID:???
>>144
> smartyの html_select_dateのようなヘルパ

EthnaでInputタグ吐き出し系のヘルパ(Smartyプラグイン)ものは、
ActionFormを絡めないと効果半減以下なので、Smarty標準のものは使わないなー。
ActionFormはグローバルで取れるから。

日付とかは、セレクトタブで選ばせるのは意外とツライかもなので、
ttp://labs.spookies.co.jp/static/
とかのを使ったSmartyプラグインとか作った方がいいのかも。

> 複数の画面で共通して使いたいフォーム
これは結構悩みどころなんだけど、そういう場合は、フローとしても
共有部分が根っこにひとつありそうなものなので、そのActionFromで定義。
その時に、
var $form_template
で定義すると、必要なフォーム定義だけ
var $form = array( 'use_form1' => array(), 'use_form2' => array(),);
てやると定義を再記述せずに良い。で、「あーだけど、'use_form1' は基本
必須だけど、ここ(以下のAction)だけは必須にしたくないなー」っていうときは、
'use_form1' => array(
'required' => false,
),
とかすると、required=>falseを除いて全部定義を引き継ぐようになる。

最初、'use_form1' => array(),とか書くのさえダルイなーとか思ってたけど、
これ結構合理的。

あと、あんまり共有化を考えるとあとで縛られまくるから、ある程度差が出てきたら
「えい」ってコピペするのが吉。一度それで死にそうになったことがあるので。
0149140垢版2008/04/18(金) 18:15:30ID:???
つーか、138=146ならもう書く気なくなた
0150144垢版2008/04/18(金) 18:36:06ID:ImKomyWi
>>148
たびたび、どうもです。

/public/
/users/
/suppliers/
/admins/
とディレクトリを別けていて/public/のページにすべて検索フォームをつけたいんだけど
action/public.php の $formに書くのが吉ということですね。

あと、検索、一覧、編集というような画面を作るとき面倒なので ActionFormを一つにして
変数で処理を分けているんですが、検索のときに用いる $form定義と 編集のときに用いる
$form定義がかぶるんですが、これって対処するものですか?

表示・入力用 = id, pass, name とかで
検索用= s_id, s_pass, s_name とかにするとか?

このへんイマイチわかっていません。
お願いいたします。
0151140垢版2008/04/21(月) 22:59:35ID:???
>>145
>Viewに書いたのには....
それはそれで一つの解だと思う。正解は無いから自分にあった方法を見つければ。

自分の場合は、EthnaはActionForm==ActionClassなところがあるから、
ActionFormの動的な定義(セレクトタブの中身とか、ラジオの選択肢とか)なんかはActionClassのprepare()でやることが多い。
本当はActionFormのコンストラクタでやれるといいのだけど、ActionFormでは
AppManagerを取れないから。(DBも取れなかったのかもな・・。)

それに、あるActionFormをつかうフローでは、そのフロー以下では
そのActionFromって継続的に定義されているべきなことが多い。
だから、大元で定義しちゃえば、あとはparent::prepare();でオk。

とにかく、parent::prepare();とparent::perform()を効率的に使うと良い。
使いすぎると、「あれれれれ・・・・・?どこで定義してるんだ?」になって
しまうけど、まぁ通常のコードよりはスパゲティ化しにくい。少なくともActionで定義というルールを作っておけば。
0152140垢版2008/04/21(月) 23:03:23ID:???
>>150
>action/public.php の $formに書くのが吉ということですね。
それ以降で、特にActionForm定義にカスタマイズが無ければそれでOK。
あとは、それ以降のActionClassでは定義のみの空のクラスを作ればOKなんで。

逆に、action/public以下で細かいActionForm定義を加えたい場合は、
ActionClassのprepare()でやっても良いし、
もうちょい頻繁に定義を書き換えたい場合はaction/publicの$formではなく
$form_templateにしておいて、各それ以下のclassで$formを名前だけ空配列で
定義。カスタマイズするところだけを追加定義。


0153140垢版2008/04/21(月) 23:08:12ID:???
>>150
>検索のときに用いる $form定義と 編集のときに用いる$form定義がかぶる
これは自分はそのままやってる。
というのは、結局DBを背景に考えているから。
学校名で検索ってあったら、検索する時も、編集する時も、schoolテーブルの
school_nameフィールドから検索すると思うが、その時に検索時と編集で
formキーが違うとなんかうっとうしい。

でも、検索時はschool_nameはnot requiredだし、編集時はrequriedだから・・・
という場合にやっぱりさっきの動的なActionFormの定義が役に立つ。

んで、これをさらに共通化させて、
action/public
action/admins
で同じForm定義を使い回そう・・・・とか考えるとハマる。ここは素直に面倒でもどっちか
先に作ってからコピペ。そのうち仕様も変わるだろうし、pucblicとadminsで違うものに
なっていくのは目に見えているからな。
0154138 !(146)垢版2008/04/23(水) 00:39:20ID:???
>>140様 超、ありがとうございます。
規制されていたので返信が遅くなりました。
聞きたいことは山ほどあるんですが..........w

フレームワークを使うのは cakePHPをメンテナンスで少し触ったんですが
国産でいいのないかなぁと探して見つけたのが Ethnaだったんです。
Greeでも使われているし、それなりに信頼できるのかなぁ?ということと
smartyはしょっちゅう使っていたのでヘルパに smartyが使われいたので
他のは全然評価もせずに Ethnaに決めてしまって、いまかなり苦しんでいます。
使用人口が少ないようで、WEB上にドキュメントが少ない(´・ω・`)

途中ZFに切り替えようかとも思いましたが、ZFはバージョンアップごとに色々
問題があるようなので、やめときました。
0155140垢版2008/04/23(水) 21:44:20ID:???
Ethnaは小回りが利くっていうか、軽い。まぁちろっと使う分には便利だと思う。
Cakeは一度使ってみるかと思いつつ、コード見て「んー。汚い・・・」って思って使ってない。

SynfonyとかcakePHPとかガッツリ使うほど大きな案件請けてるわけじゃないんよ。
あと、Ethna枯れてるしな。FWって枯れ時が実案件で使い時っつーところもあるし。
0156138垢版2008/04/23(水) 22:26:16ID:EWcSFprb
またまた規制されてしまった
最近、月のうち半分以上が規制されている感じ…

なので携帯からです
一度書いたのになんかチェックのページが表示されて、戻ってもう一度送信しろと書いてあったからその通りしたら消えた…

>>155
しかし、ドキュメント少なすぎますよね?
古いバージョンのものとか混在しているし…

今は大分慣れてきたので、普通のことをやろうとするのは大分楽にできるようになりましたが、
ちょっと凝ったことをやろうとすると、簡単にはまる。

ちなみに140さんは、自前のテンプレートを作成してしようしていますか?
あと、今はeacceleratorのある環境で実行しているのですが、ない場合って結構重たいのでしょうか?
今作っているのが階層が結構深くなるんですが、深くなるほど処理は重くなりますよね?
0157140垢版2008/04/25(金) 00:32:52ID:???
>>156
ドキュメント無い分はコード読んで何とかしたかな。3年前はドキュメント皆無だったし。
当時はプログラムあまりしらなかったから大変だったけど勉強になった。
>>138はオレが昔書き散らしたものとかどっかで読んでるかも。

基本的にEthnaでやろうとしてできなかったことは無い。
ActionChainと呼ばれるらしきものも強引気味にやったし。
まぁ、たいしたものを作ってないっていうのもあるけど、1〜2人ならEthnaで十分。

>ちなみに140さんは、自前のテンプレートを作成してしようしていますか?
自前のテンプレートって、Smarty以外でってこと?Smarty慣れちゃって、それしか使ってないなー。
Smarty重いっていうけど、早く作れるし。
eAccは、普通レンサバに無いので使ったこと無いです。
サイト立ち上げ当初は速くよりも早く作れることなんで。。。

都内なら会社来てもらえば色々説明もできます。
ステ fromdustman@imap.cc

0158nobodyさん垢版2008/04/25(金) 13:09:06ID:???
都内ならPHP勉強会でたまに取りあげたりしてるんで是非。

>あと、今はeacceleratorのある環境で実行しているのですが、ない場合って結構重たいのでしょうか?
>今作っているのが階層が結構深くなるんですが、深くなるほど処理は重くなりますよね?

階層はたぶん関係ないかと。eAあった方が早いのは間違いないですがよほどPVがない限り気になりません。
たいていフレークワーク本体よりは時間のかかるロジックがボトルネックになります。
0159140垢版2008/04/26(土) 00:21:00ID:???
>>158
んー、PHP勉強会は昔出たことあるけどあんまり勉強会で話すことも無いかと思う。
別に目新しいことしてるわけじゃないし、良い意味で枯れかけの技術だと思ってるんで。

なんで、できるとしたら、ここでやってるような
「これ、わかんないんだけど、どうしたらいい?」
「こんな感じでEthnaコード書いてるけどどう?」
ってのに対話するぐらいで。

それはそれで楽しいけど、それってPHP勉強会の雰囲気じゃない気がするんだよね。
0161nobodyさん垢版2008/05/03(土) 10:18:16ID:???
一週間いじってみたがこんな致命的バグの潜んだFWは使う気になれん
0162nobodyさん垢版2008/05/03(土) 16:28:30ID:???
>>161
具体的に書いた方がみんな幸せになれるから
具体的にお願いします。
0164nobodyさん垢版2008/05/03(土) 23:30:29ID:???
>>161
http://pc11.2ch.net/test/read.cgi/php/1177683436/276
276 名前:nobodyさん[sage] 投稿日:2008/04/30(水) 12:41:32 ID:???
一週間いじってみたがこんな致命的バグの潜んだFWは使う気になれん

http://pc11.2ch.net/test/read.cgi/php/1205475360/765
765 名前:nobodyさん[sage] 投稿日:2008/04/29(火) 00:30:20 ID:???
一週間いじってみたがこんな致命的バグの潜んだFWは使う気になれん
0165nobodyさん垢版2008/05/04(日) 14:07:09ID:NE4g0gE+
[project]-ini.php
で通常DB使う場合に設定する
"dsn"=>"mysql://mysql_user:mysql_userpass@mysql_server/mysql_db",
といった記述なんですが、
mysql_server部分 を動的に変えたい場合、何か良い方法はないでしょうか。
[project]-ini.php 内では
$this->aff->get()とか使用できないので。。。
0168nobodyさん垢版2008/05/09(金) 20:41:27ID:lfzI+vCi
validate について質問

1.inputフォーム
2.validate->確認画面
3.DB更新&完了画面

という遷移をしたい場合 validateって3でも必要ですか?
2でvalidateが通った後無理やり GET引数に?varname=XXXX...略、とか
したら、validateが通っていないデータで更新できてしまいますよね?

あと、formでpostを繰り返して遷移していく場合、もどると期限切れに
なりますよね?これって 302とかを使って解決すると思いますが、
Ethna的にはどのように書くのでしょうか?

1. GET なにがしかの form
2. POST confirm [validate] => 302 confirmed
3. GET confirmed
4. POST do => 302 done
5. GET done
0169nobodyさん垢版2008/05/10(土) 01:48:48ID:???
>>168
ヒント:
class DB更新&完了画面Action extends 確認画面Action
{
  function perform()
  {
     DB更新
     return 完了画面のview
   }
}
0170nobodyさん垢版2008/05/10(土) 12:38:54ID:???
>>168
トランザクションチェックやら、CSRFチェックやら、
validate済みデータをセッションに保存しておくやらすればいいんじゃね?
0172nobodyさん垢版2008/05/15(木) 18:46:19ID:???
>>168
3でもvalidateは必要です。
複数の画面を遷移しながら移動する場合はセッションに保存するのがてっとりばやいでしょう。
0173nobodyさん垢版2008/05/16(金) 09:22:57ID:???
戦後教育は文部省と日教組の不毛のイデオロギー対立により本来の教育を蔑ろにし、主役である子供達を放置してきた。最初にその犠牲となっ
たのがいわゆる「団塊チルドレン」と呼ばれる世代である。彼らは歪んだ「権利・自由・平等」を教えられ、「責任・義務」を教えられないま
まに育った。日教組は彼らに経済と言う物差ししか与える事ができず、信念・哲学・自尊心という価値からは程遠い「金と物」にしか価値を見
出せない貧しい精神を育んだのだ。この事は「失われた十年」と呼ばれる90年代に於ける彼らの生き様に大きく影響した。
子供は幼児期に於いて父性と母性の対比の中で社会性を獲得する。「亭主元気で留守が良い」と言うコピーがはやったが、父性不在の家庭はや
がて「団塊チルドレン」の社会性の無さの原因となった。当時オバタリアンと呼ばれた世代は、戦後処理もろくに済んでいないのに平気で海外
へ出かけ、金に飽かせてブランド商品を買い漁り、傲慢さを世界中にまき散らした。彼らの世代に特徴的であるこの品性・品行の悪さは、後の
世代のライフ・スタイルにまで影響を与えた。それ以上に、欧米諸国が未だに日本人を蔑視し、アジア諸国が不信感を持ち続けている事への鈍
感は不幸でさえある。団塊の世代が戦後の営みの中で経済力に見合う人生観や価値観、広義の品性・品行やモラルを獲得していれば日本社会は
ここまで歪まなかっただろう。
90年代は「失われた十年」と呼ばれている。経済と言う物差ししか持たなかった我々は、旧来の発想で経済的な豊かさを追求し続けたが故にバ
ブルの崩壊をもたらした。その時不幸だったのは「我々は何処へ行くのか?」と言う根源的な迷いに気かなかった事だ。この事が90年代を無為
に浪費した最大の原因である。団塊の世代は欧米を追う間は素晴らしい能力を発揮したが、追いついた後のビジョンを描く想像力が欠如してい
た。彼らの責任では無い。社会が彼らにその様な能力を要求しなかったのだ。村上龍の「あの金で何が買えたか」が売れたと聞くが、悲しいの
は未だにその程度の次元でしかバブルを検証できないメンタリティーの低さである。検証すべきは「何故我々が貧しい価値観しか持ち得なかっ
たのか」と言う事である筈だ。まさしく教育の問題である。冒頭で述べた様に信念・哲学・自尊心を育む努力を怠らなければ、もっと違った社
会があった筈である。
0174nobodyさん垢版2008/05/18(日) 05:34:12ID:5L4/s+Ln
Ethnaの中の人、全然やる気無い感じが伝わってくる
0176nobodyさん垢版2008/05/18(日) 17:29:54ID:???
DBまわりがよくなればいいのにねえ
0177nobodyさん垢版2008/05/18(日) 22:38:14ID:???
CakePHPに乗り換えたけど、まだちょっと期待してるよ
0178nobodyさん垢版2008/05/26(月) 12:53:26ID:eXimI0Ql
Ethna_ActionForm::handleError()
ってオーバーライドできますか?
なんか {APPID}_ActionFormに書いても出来ないんですけど(´;ω;`)
0179nobodyさん垢版2008/05/28(水) 01:02:10ID:???
ちゃんと{APPID}_ActionFormを継承してるか?
0180178垢版2008/05/30(金) 10:07:06ID:mNLSpKje
>>179
どうもです。

$use_validator_plugin に falseを設定したら動きました。
が、pluginが使えないと色々面倒ですね。

エラーメッセージを全体的に変更したくて、Ethna本体を変更しないように
ってなると、やはり Pluginを自分で書くなりするしかないですか?

たとえば未入力のエラーは標準が
{form}を入力してください
ですが
{form}を入力してくださいね♪
にしたい場合など、みなさんはどうしているんでしょうか?

$form_template とか使うんでしょうか?
0181nobodyさん垢版2008/05/30(金) 12:00:15ID:???
$form => array(
'required_error' => '{form}を入力してくださいね♪ '
0182nobodyさん垢版2008/06/02(月) 10:16:58ID:???
ethnaのサイトウィルスはってあったから注意
iframeのやつね
誰か連絡してやってくれ・・・
0183nobodyさん垢版2008/06/02(月) 16:14:36ID:aKm7Z/AW
ethnaのサイト落ちてますか?
0184nobodyさん垢版2008/06/02(月) 19:44:54ID:???
>>183
ethena.jpが乗っ取られてたらしい。
現在は閉鎖中。
0187nobodyさん垢版2008/06/03(火) 04:54:20ID:???
さくらインターネットのルータがウイルスに感染してたってこと?
その方が怖いんだが
0188nobodyさん垢版2008/06/03(火) 05:15:50ID:???
さくらスレ見たらやっぱりさくらが問題みたいね
こえーな
0189nobodyさん垢版2008/06/03(火) 06:03:26ID:GVCDkPaZ
ってか大問題なのに騒がれなさすぎだろw
上流でクラックされてたらどうしようもない
サーバ単位の感染の比じゃねーぞ
0191nobodyさん垢版2008/06/03(火) 09:34:43ID:???
そんなに簡単に乗っ取れるインターネットっていったい
0192nobodyさん垢版2008/06/03(火) 17:20:00ID:khCiq63d
簡単に言うけど、ssl化すればいいんじゃね?


ところで、Ethnaで アクションからアクションを呼びたい場合って同かけばいいのでしょうか?
今作っているのがバッチ処理の関係なんですけど、バッチ処理をコントロールする
アクションがいて、条件によってサブの処理アクションを呼び出したいんですけど...

/batch.php <= 一定時間ごとに起動
/batch/proc1 <= サブアクション
/batch/proc2   〃
/batch/proc3   〃

あと、2.3.5がリリースされましたが、2.3.2からはそのままアップデート
して何か問題ありますか?
0193nobodyさん垢版2008/06/03(火) 19:46:36ID:???
>>192
確か公式にアクションチェインの方法かいてあったはず
0194nobodyさん垢版2008/06/03(火) 20:13:41ID:khCiq63d
>>193
どうもです。
マニュアル見ててわかりました。

$this->backend->perform($action_name);
を perform()に書いてあげればいいみたいですね。
0195nobodyさん垢版2008/06/04(水) 03:06:30ID:???
>>192
そのままアップデートして問題ないよ。大きくは変わってないので。
0196nobodyさん垢版2008/06/10(火) 10:19:27ID:w4tQWM9Z
$this->session->start() のあとに
$this->session->isStart() してもtrueが返らないのは仕様ですか?
$this->session->isStart(true)とすれば返るんですが...

Ethna_Session::start()のなかで $this->anonymousに代入していないのは
わざとですか?

$_SESSION['__anonymous__'] と Ethna_Session::anonymouse には何か使い
分けている理由があるのですか?

0197nobodyさん垢版2008/06/11(水) 08:10:19ID:???
$this->session->start()じゃなくてsession_start()してんじゃないの?
auto_startとか。

あと匿名と通常のセッションを同時に使い分けることはできない。

気にくわないならEthna_Sessionを継承しる。
0198JK垢版2008/06/11(水) 08:31:19ID:xujtuY+c
>>197
ソース見て見れ!
Ethna_Session::start()
で $anonymousに代入していないから
restoreが呼ばれてからじゃないと
isAnonymous() で取得できないから、isStart()が正常な値を返せない

これは仕様なのか?
ログイン処理で匿名から、通常のセッションに切り替える処理を入れたんだが
ログインチェック処理が何故かうまく通らないから調べたら、そうなっていた

start()
ttp://ethna.jp/doc/__filesource/fsource_Ethna__classEthna_Session.php.html#a142
isStart()
ttp://ethna.jp/doc/__filesource/fsource_Ethna__classEthna_Session.php.html#a276
isAnonymous()
ttp://ethna.jp/doc/__filesource/fsource_Ethna__classEthna_Session.php.html#a295
0200nobodyさん垢版2008/06/11(水) 20:46:44ID:???
>>198
だから「同時に使い分けることはできない」んだってば。
これが仕様なのかバグなのかは知らないけど。
0201JK垢版2008/06/11(水) 21:08:49ID:xujtuY+c
>>200
だから、切り替えたいんだってば。
というより。
Anonymous関係なく、 session->start()した直後 isStart()よんでみ?
0202nobodyさん垢版2008/06/11(水) 21:59:31ID:???
start前はbool(false)、
start後はbool(true)になるけど?
0203nobodyさん垢版2008/06/11(水) 22:07:52ID:???
「切り替え」も「同時に使い分ける」と同義。
匿名セッションをdestroy()してから、そのまま通常セッションをstart()してもだめってこと。

0204JK垢版2008/06/11(水) 23:40:12ID:xujtuY+c
>>203
なるほど、そういう説明なら納得。

ログイン前の情報を匿名セッションで保存していて、ログイン後にそれらの
情報を扱いたい場合ってどうしているんですか?

Ethna_Sessionを new して $this->session に渡しちゃうとかですか?
0205nobodyさん垢版2008/06/15(日) 01:00:02ID:???
わざわざ匿名セッションを使う意味がわからんのだけど。
「匿名セッション」=「Ethnaアプリではないアプリが開始したセッションを使うため」かと。
0206JK垢版2008/06/15(日) 01:48:12ID:vmTqGR6A
>>205
実はよくわかってないのです。
匿名=アプリには非ログインだけど、セッションを使いたい
非匿名=アプリにログイン状態
かな〜と、勝手に思っていました。

たとえばログインのアクションを起こす直前の情報を匿名状態で持っていて
ログインが必要なアクションを起こした場合にログイン画面へジャンプ。
ログイン処理が正常に済んだら、保存していた情報でページにジャンプしたり
フォームに入力したりする。

一応ロールっぽい概念は持っているんだけど、一番簡単なログインチェックは
isStart() を呼ぶだけで出来るから便利だなぁなどと思っていたけど、
ちょっと違うのかな?
0207nobodyさん垢版2008/06/15(日) 11:45:46ID:???
それならログインしていようといまいと普通にセッションを使うべし。
ログインしたらセッションの中にフラグを立てる。
あとはisStart()じゃなくてそのフラグを確認するだけ。
0208JK垢版2008/06/15(日) 17:30:32ID:vmTqGR6A
なるほど、ありがとうございます。

えーと、こうなったいきさつを少しだけ、ethnaのサイトに isStart()で
ログインをチェックしているサンプルがあってセッションスタート=ログイン
状態というような感じのサンプルでした。

それでそれを元に開発を進めていったんですが、非ログイン状態でもセッション
を使って何かしたいなぁ。となったときにセッションを明示的に開始していないと
セッションが使えないという罠にはまり、しばらく悩む。
で、ソースを眺めていたら、匿名というのを見つけて、匿名時はisStart()が
falseを返すという性質があるなぁそれなら。
となったわけです。

普通に考えたら、セッションにフラグを持つのが正解ですね。
事実FWを使わないときはそうやって書いていたし...

逆切れすみませんでした。

PHP全般とおしていえることですが、無駄にセッションを開始したくない場合
ってどうやるのが正解ですか?

sessionのauto_startを無効にして
if (!empty($_COOKIE['SESSID'])){
session_id($_COOKIE['SESSID']);
session_start();
}
というような感じでしょうか?
0209nobodyさん垢版2008/06/24(火) 20:05:23ID:et7OSP74
>>208
たぶんそれで問題なあいと思うよ。
まぁそんなに神経質にならなくてもGCがうまいことやってくれます。


ところで、過疎化しているから回答がつかないかもしれないけど質問。
HiddenVarsを使うという記事を見つけたのですが、これって
1.input 2.check 3.do という 3phaseで処理する場合 2で validate
しても 2と3の間でデータを書き換えできますよね?
3の直前に validateを入れたとしても書き換えたデータがそれなりの
ものであれば、2でチェックした内容と違うもので更新できますね?
さらにいうろ 3のアクションのみでデータを登録できちゃうから、
不正登録とか連投ができますよね?
これを防ぐにはセッションやチェックファイル、DBなどを使わないと
だめですよね?
何かいいアイディアありますか?
0211nobodyさん垢版2008/07/01(火) 08:37:05ID:2M+ISpJV
すんません、たとえば複数のテーブルを扱うと時って アクションクラスには
どのように書けばいいのでしょうか?

例えば会員情報に会員状態を表す status(仮登録、本登録、退会、削除)があり、
付随するデータにそのデータの状態をあらわす status(下書き、公開、閲覧停止、削除)
があったりします。
0212nobodyさん垢版2008/07/01(火) 11:34:32ID:???
このスレにレスが付くのは不思議だよな・・・。 
0213nobodyさん垢版2008/07/03(木) 08:29:19ID:cyN9Rfkc
>>212
おまいの自作自演だったりして、このレスもw
0214nobodyさん垢版2008/07/28(月) 10:13:22ID:YSIM2iDa
過疎化しているようなので、レスがつくか不安ですが質問です。

$this->backend->perform() でサブアクションを実行したいのですが、
$form要素は呼び出し側のものしか反映されていないようです。

サブアクションのアクションクラスで$form要素を定義したいのですが
どのように書けばいいのでしょうか?
0215214垢版2008/07/28(月) 10:25:20ID:YSIM2iDa
間違えた

>サブアクションのアクションクラスで$form要素を定義したいのですが
>どのように書けばいいのでしょうか?

サブアクションのアクションフォームクラスで$form要素を定義したいのですが
どのように書けばいいのでしょうか?

です。
よろしくお願いいたします。
0216nobodyさん垢版2008/07/28(月) 14:37:54ID:???
質疑は社内ですればいいのに・・・。
0217nobodyさん垢版2008/07/28(月) 21:06:11ID:???
>>215
そもそもチミは$formの定義をなんだと思ってるのかね・・・。
ActionClassと一対一なんだよ。
サブアクションとか勝手に言っても、それは勝手に言ってるだけだから
自分でちゃんとActionformもnewして_setFormDefしたまえ。
0218nobodyさん垢版2008/10/01(水) 11:11:33ID:???
Ethnaのサイトに繋がりません。
0219nobodyさん垢版2008/10/01(水) 22:42:24ID:???
ethnaみたいなゴミフレームワークよく使えるな
0220nobodyさん垢版2008/10/14(火) 23:49:51ID:???
え?砂フレームワークだよ
0221nobodyさん垢版2008/10/18(土) 13:20:02ID:???
>>219
なにつかってる?
最近乗り換えけんとうちう
0222nobodyさん垢版2008/12/15(月) 15:11:08ID:???
RSSパーサーってみなさんはpear使ってますか?
0223nobodyさん垢版2009/01/12(月) 20:55:45ID:ZFy7iIA6
GREEの腐ったCMのおかげで
Ethnaも腐ったフレームワークと見られるようになりました
0224nobodyさん垢版2009/03/01(日) 19:57:05ID:Hv9B/Cgp
http://labs.gree.jp/Top/Document/20060707.html#d1ddfba7

手始めに↑を動かしてみたんですが、
エラーメッセージが2重に出てしまっています。

例えば、全ての項目を空にして送信ボタンを押した場合に
以下のようなエラーメッセージが表示されてしまいます。

* メールアドレス が入力されていません
* パスワード が入力されていません
* パスワード(確認) が入力されていません
* メールアドレス が入力されていません
* パスワード が入力されていません
* パスワード(確認) が入力されていません

2重のエラーメッセージが表示されないようにするには、
$errorsを自前で処理にしないといけないのでしょうか?

環境:
Ethna 2.5.0-preview3
0225224垢版2009/03/01(日) 22:40:13ID:???
すみません、こちらのミスでした。

prepare()メソッドにvar_dump($this->af->validate());を書いていた為に
エラーが2重で出力されていたようです。

function prepare()
{
  if ($this->af->validate() > 0) {
    var_dump($this->af->validate());
    return 'index';
  }
  return null;
}

var_dump($this->af->validate());を削除したら2重で表示することはなくなりました。
0226nobodyさん垢版2009/07/30(木) 12:43:43ID:???
ethnaでサイト作ってあるんですけど、メンテのときだけ
どのページにアクセスしてもメンテ中画面に飛ばす方法ないですか?
0227nobodyさん垢版2009/07/30(木) 12:48:49ID:XFFHqckQ
あげ!
・・・って前の書き込み5ヶ月前かよ・・・。
0228nobodyさん垢版2009/07/30(木) 22:16:06ID:???
>>226
決まったActionしかしないってことにさせればいい。

エントリポイントを1つにルーティングしてるなら、そのエントリポイントの
main()の第2引数をarray('undermaintainance')にしちゃえば。

たくさんエントリポイントがあるなら、Controllerの
getActionFormNameをoverrideして、つねに'undermaintainace'の
Stringを返すようにすれば良いんじゃない?

0229nobodyさん垢版2009/07/31(金) 09:14:02ID:???
Webサーバの方でリダイレクト設定するとかでもいいんでない?

Apacheなら.htaccess一個書けば済む
0231nobodyさん垢版2009/08/25(火) 11:28:16ID:X6yGpm6m
誰かまだ使ってるの?
これ使って作られたオープンソースものがあれば教えて欲しいと思ったんだけど
0232nobodyさん垢版2009/08/26(水) 16:38:32ID:UZkILcW9
誰か見てますか…此処。
質問とかしていいのかな?

<select name="aaa" id="aaa" size="7" multiple class="bbb">
 {foreach from=$app.hoge item=item}
  <option value="{$item.hoge}">{$item.fuga}</option>
 {/foreach}
</select>
と、tplで書いています。
ここに出されたデータをアクションの方で
$this->af->get('????');
って風に取り出したいんです。

やってみた事↓

[action側]
'aaa'=>array(
 'type'=>array(VAR_TYPE_INT),
 'name'=>'ほげ',
),

[tpl側]
上のname="aaa"をname="aaa[]"に

[action側]
$this->af->get('aaa');

結果はNULLでした…。
<input type=~.....
のつもりでやってたんですけど…どうにかしてselectに入ったデータって取り出せないですかね。
0233nobodyさん垢版2009/08/31(月) 14:48:44ID:ueVwiefa
とれるが、ちゃんと調べて説明する暇がないのでがんばってくれ
そもそもとれないとプログラムとしておかしいだろ?
0234232垢版2009/09/03(木) 14:48:01ID:42dHYBvA
ありがと。
別のややこしい方法で取ったよ。
0235nobodyさん垢版2009/09/29(火) 11:04:09ID:0+eTXppc
actionフォームの方からテンプレートのラジオボタンとか…弄れないかなあ…。
検索前の画面でラジオボタン1、2とテキストボックスがあって
2を選んだ場合はテキストボックスが使えなくなる(disables)
検索する前に、2のラジオボタンが選択されてたら、検索後の画面で2のラジオボタンが選択されたままになってて、
テキストボックスは使えないまま表示される。
って事がしたいんですけどね。

現在は最初の読み込みでラジオボタンどっちも選択されてないし、検索後もどっちからも外れ、
テキストボックスの使用不可もはずれちゃう状態…。

1のラジオボタンに<input.......checked = true />って入れてみたら
最初の読み込みではラジオボタン1にチェック入るようになったのは良いんだけど、
2を選んで検索した後も1が選択されてるんですよね…。

誰か解決策知ってる方いらっしゃったらよろしくお願いします。
0236235垢版2009/09/29(火) 11:11:57ID:0+eTXppc
すみません。ラジオボタンの問題は自己解決しました。
0237235垢版2009/09/29(火) 11:12:36ID:0+eTXppc
すみません。ラジオボタンの問題は自己解決しました。
0238235垢版2009/09/29(火) 11:13:21ID:0+eTXppc
書き込めない…?
ラジオボタンの問題は自己解決しました。
0239nobodyさん垢版2009/09/29(火) 23:19:45ID:???
>>235
うーん、ActionFormからHTMLにdisabledを入れるのって
今時のやり方じゃない感じがする。

disabledってあくまで補助だから、補助は補助らしくjavascriptで後付け設定かなぁ。
しかも、radioとtextの連動だからなおさらその感じがする。

自分だったら、適当にradioとtextにid振って
$(function(){});

Event.observe(window, 'load', function(){});
するかなぁ。
0240nobodyさん垢版2009/10/02(金) 03:07:29ID:???
これ面白そうだな。

いまやってるDrupalが落ち着いたら手を出してみたい。
CMSはページ管理には便利だけど、ハマると結構てこずるや。

ZFWとどっちがMVCの分け方判りやすいかな
0242nobodyさん垢版2009/10/08(木) 15:15:39ID:2JJQdndq
Fatal error: Call to a member function getAll() on a non-object in

…というエラーが出ます。
getAllを用意した__DB_PEAR.phpもlibに入れてControllerからincludeしてるのに…。

Ethnaは最新バージョンです。

何故飛べないのか原因がさっぱりです。
0243242垢版2009/10/08(木) 18:57:42ID:2JJQdndq
MySQLの設定で何か問題があったようです。
詳しくは分かりません。
0244nobodyさん垢版2009/10/19(月) 23:28:51ID:/Zspq1xO
ethnaにPEAR::PAGERのようなページング用のメソッドは
用意してありますでしょうか?
ご存知の方が居られましたらご教授よろしくお願いいたします。

0245nobodyさん垢版2009/10/20(火) 10:02:54ID:???

つttp://ethna.jp/
Ethna > ドキュメント > 開発マニュアル > デモ > ページャを作成する
0246nobodyさん垢版2009/10/23(金) 18:04:21ID:7dG7Qup9
http://hoge.com/ethna/?hoge=1&peko=1

というURLがあったとして、hogeとpekoが入れ替わることもあるとするとき、
1つ目の引数がhogeであるかpekoであるかを知る方法ってありますか?
$this->af->get(name[0])
とかで、hogeって入ってるとか。
今のところpathinfoあたりから自分で分解するしか思いつかないです・・・
0247nobodyさん垢版2009/10/23(金) 22:38:55ID:???
>>246
$_SERVER['QUERY_STRING']からとるしかねーじゃん。
0248nobodyさん垢版2009/10/26(月) 15:52:54ID:jayyJSrP
>247
やっぱそうなりますか。
ありがとうございますた
0249nobodyさん垢版2009/10/27(火) 21:30:22ID:???
アクションloginのフォーム表示画面でsubmitするとURLがindex.phpになってしまうんですけど
これを同じloginにするにはどうしたらよいでしょうか?エントリはindex.phpです。
0250nobodyさん垢版2009/10/28(水) 00:20:21ID:???
>>249
hogehoge.tpl
<form action="login.php" method="post">
<input type=hidden value=1 name=action_login_do>
<input name=id>
<input name=pass>
<input type=submit>
</form>



login.php
<?php
include_once Hoge_Controller.php
Hoge_Controller::main('Hoge_Controller', array('login', 'login_*'), 'login');
0252nobodyさん垢版2009/11/10(火) 11:26:10ID:???
クエリエラーが発生したとき、画面上に
***[508](ERR): Ethna_DB_PEAR._query(\class\DB\Ethna_DB_PEAR.php:306): Query Error SQL[〜〜]
みたいな感じで表示されるんだが、これを止める方法ってない?

一応、ロジックで
$res = $db->query($sql);
if (Ethna::isError($res)) {
return Ethna::raiseNotice('登録エラー',E_DATA_REGIST);
}
みたいな感じにはしてるんだけど・・・・。
0253nobodyさん垢版2009/11/25(水) 12:11:40ID:KpnnUhSV
EthnaってもうちゃんとO/Rマッピング対応してんの?
joinとかサブクエリーとか、Postgresとか使える?
0255nobodyさん垢版2010/01/28(木) 12:15:27ID:???
アダルトサイトなんてXOOPSか下手するとブログ程度かと思ってたのに。
進んでんな。
0256nobodyさん垢版2010/02/10(水) 11:31:46ID:SPzWL0O/
{form_input name="hoge"}
の形でcheckedフラグ入れれる方法知りませんか?
最初からchecked=trueにしておきたいのですけど…。
型はチェックボックスでoptionに連想配列入れてるので<input...の形にはしたくないのです。

actionで$formに何か指定できるとか、{form_input...に何か付け足すとか
ご存知の方いらっしゃいましたらお願いします。
0257nobodyさん垢版2010/02/10(水) 11:41:00ID:???
>>252
if (Ethna::isError($res))を何処に書いてるのか分からんが
Managerに書いてるんだったら処理全体をtryで囲って、
エラーの場合はcatchにthrowしてfalseを返す仕様にしたらどうだろう
呼び出し元の方で$this->ae->addObject();を使う
0258256垢版2010/02/10(水) 17:21:50ID:SPzWL0O/
自己解決しました。

$this->af->set('hoge', "valueの値");
とすることによって、指定の箇所へチェックを入れれました。
0259nobodyさん垢版2010/03/25(木) 14:23:49ID:zMyaEA+v
誰かいます?
0262nobodyさん垢版2010/03/26(金) 21:22:48ID:???
加持君の留守電を思い出したわ
0263nobodyさん垢版2010/03/27(土) 18:56:17ID:???
そもそも何でCakePHPとかsymfony使わずにEthnaをなのか
そこから教えて欲しい。
0264nobodyさん垢版2010/03/28(日) 02:07:00ID:???
グリイが使ってるという安直な理由だけだろう。サポートも無いのにね。
そのグリイもエスナ導入のために、メンテナを技術部長待遇で飼うほど維持コスト描けてる現実。年間1000万以上?
0265nobodyさん垢版2010/03/28(日) 10:49:14ID:???
pear-local でethnaインスコしたらエラーが出る件。
0266nobodyさん垢版2010/03/28(日) 17:13:55ID:???
大して出来の良いとは言えない俺俺フレームワークを
使ってもらって年収1000万円ももらえるのかよ。
羨ましすぎる。
0267nobodyさん垢版2010/03/28(日) 23:25:20ID:???
出来はいいと思う
aoとamが同じファイルでapp直下のディレクトリっていうのは駄目だけど
あともうちょい更新頻度が高ければ…
0268nobodyさん垢版2010/03/29(月) 16:16:58ID:???
これってwwwのディレクトリだけを777にして後はアクセス拒否してもいいの?
天才さん、運用時はどうしてるかおすえて><
0269nobodyさん垢版2010/03/31(水) 05:41:12ID:???
出来が良ければみんな使ってるはずだが(ry
0270nobodyさん垢版2010/03/31(水) 09:37:06ID:GZLqm0AV
Ethnaで複数のレコードをとってくるにはどうしたらいいの?
AddObjectを使って出来る?
0271nobodyさん垢版2010/05/24(月) 02:13:33ID:???
2ヶ月近く誰も書かないけど、新規案件とかでethnaて使ってる?
2年前にケータイ案件で遭遇だけはしたけど、受注しなかったし、
GREEとかmixiとか出てくると臭くて使わないんだが・・・。
0272nobodyさん垢版2010/05/26(水) 12:01:18ID:HLwkDSbr
>271 使ってるよ
0273nobodyさん垢版2010/05/28(金) 18:57:26ID:???
新規案件があったら他の使うかも
0274nobodyさん垢版2010/05/30(日) 00:55:59ID:???
>>273
なに使う?ZendFrameworkかCakePHP?
MapleはNetCommonsで見てダメだと思った。
0275nobodyさん垢版2010/05/30(日) 01:45:22ID:???
俺は個人だから大した案件は取れないけど、
小さいところはYiiなんで攻めても良い鴨。

Cakeは一通り慣れたけど、なんつーかAccessのPHP版て感じ。

言語仕様もあるけど、ビューのソースは荒れるし、
コントローラにグダグダ書くし、金になる(既存和製の)業務システムと
RoRの相性がイマイチな感触も受けてる。

余分な予算が取れない時代にRoR的に書き換える手間を
クライアントは甘受するのかな、出来たらおめでとうってとこか。
0276nobodyさん垢版2010/06/05(土) 06:30:37ID:???
そんな苦しい案件は受けないほうがいいだろw
仕事選べよwww

greeは必死に人募集してるね。ethnaじゃやっぱり苦しいのか?
0279nobodyさん垢版2010/06/16(水) 15:05:12ID:???
ethnaで作られた見本になるような
サンプルアプリってないでしょうか?

なんか自分はセンスないような気がして
参考にさせていただければありがたいです。
0281nobodyさん垢版2010/06/16(水) 18:25:37ID:???
え、付属?すいません。見てみます。
一応、いくつかWEB上にサンプル見つけました。
参考にしてみます。
0282nobodyさん垢版2010/06/17(木) 15:22:26ID:???
まぁこれから本格派はYiiでいいな。英語pdfを13ポンドで注文するか否かを迷う俺
0283nobodyさん垢版2010/09/07(火) 17:21:04ID:???
フレームワークはYiiで決定?
これからethna触ろうと思ってたんだけど、
Yiiにしたほうがいい?
0284nobodyさん垢版2010/09/08(水) 10:40:07ID:???
困ったと起動するつもりなんだw
0286nobodyさん垢版2010/09/16(木) 15:48:33ID:???
greeの開発部長へのアポが必要。
0287nobodyさん垢版2010/09/16(木) 17:03:09ID:???
えええ、質問するだけなのにハードル高須クリニック
0288nobodyさん垢版2010/09/19(日) 03:20:03ID:???
アポが無いかたへのサポートはお断りしております。
0289nobodyさん垢版2010/11/23(火) 16:14:29ID:???
EthnaのログってエラーのURLとか記載されていませんが、みなさんこれどうされているのでしょうか?
0290nobodyさん垢版2010/11/24(水) 05:50:43ID:???
アクション名とかもないんだっけ。
なんてか、かそっぷりがはなはだしいね。
0291nobodyさん垢版2010/11/24(水) 12:13:17ID:???
2chnavi、ethnaつかってたんだな
0292nobodyさん垢版2010/11/24(水) 15:56:17ID:???
使ってるのはグリイの部長ぐらいだもの。
0293nobodyさん垢版2010/11/24(水) 20:45:05ID:???
>290
そうなのです。業務を引き継いで初めてEthnaを触り色々見ているんですが
正直、Ethna酷いですね。こんなのが皆から賞賛されてるってのが理解出来ないです。
0294nobodyさん垢版2010/11/24(水) 23:14:33ID:???
デバッグログを有効にすればいいんじゃないのかな。
運用中にエラーログでることある?
0295nobodyさん垢版2010/11/24(水) 23:32:26ID:???
>294
エラーログ出てますね、、、、詳細はわからないのですが・・・
logtype、debugは考えましたが出力されるログサイズの見積もりもしないといけないので
たくさん、ログが出過ぎるのも良くないなと思いまして・・・・

正直、私自身のEthnaに対するナレもまだまだな部分もあり、
最適なサイト運営の設定に迷っている状態です。。。
0296nobodyさん垢版2010/11/25(木) 00:15:20ID:???
たとえばどんなエラーが出てるんだろう。
部分的に伏せていいから1行見せて欲しいかも。
0297nobodyさん垢版2010/11/25(木) 00:16:45ID:???
というのも、そのエラーログを出力してるのがアプリなんじゃないかと思ったから。
0298nobodyさん垢版2010/11/27(土) 02:05:24ID:???
賞賛されてるのはsymphonyやcakeとかsmartyやpearぐらいでしょ。
0299nobodyさん垢版2010/11/27(土) 02:54:00ID:???
なんでZendをいれてくれないの。。。
Zend使ったこと無いけどさ。smartyやpearをその流れで入れるなら、せめて。
0300nobodyさん垢版2010/11/27(土) 16:18:26ID:???
zendって賞賛されてるか?
まだ中途半端だろう。
0301nobodyさん垢版2010/11/27(土) 20:11:22ID:???
どの辺がつかいにくいんすかね。
0302nobodyさん垢版2010/12/08(水) 16:25:19ID:???
サポートが無い。放置状態だし。
作者は本業のグリイの開発部長で忙しいし。グリイに金払えばサポートしてくれるサービスが有る訳でもない。
0303nobodyさん垢版2011/04/27(水) 14:09:43.24ID:fLnrs2lf
Ethnaでできた2ch携帯ブラウザ
http://m2ch.biz/
0304nobodyさん垢版2012/04/16(月) 00:03:03.49ID:???
Ethnaってまだいきてるん?
0305nobodyさん垢版2012/04/17(火) 03:22:08.82ID:???
PHP5.3に対応した2.6の状況がこんな感じらしい。
> Ethna 2.6.0 beta 2 リリース (2011/1/4)

何が理由で頓挫してるのかは不明。
手軽なフレームワークだったからもったいないといえばもったいないな。
0306nobodyさん垢版2012/04/17(火) 03:33:48.94ID:???
> Ethnaフレームワークは実用的なフレームワークであり、実際にさまざまなサイトの運用に利用されています。
> その一つが日本発のSNS(ソーシャル・ネットワーキング・サービス) GREEです。
> ユーザ数2,125万人以上、月間ページビュー数百億PVの非常に大規模なウェブアプリケーションであるGREE*1は、
> Ethnaフレームワークを用いて全面的に構築されています。Ethnaのバージョンアップ、バグフィックスなどはGREEでの
> 運用事例を踏まえて行っています。また、Ethnaの改良はGREEの構築・運用にも反映されます。
>
> 実際の運用を通して改良されていくということは、Ethnaの大きな特徴のひとつでもあります。

まだこの記述残ってるけど、GREEの運用を通して改良される点はもはやないということだろうか。
Ethna捨てたなら捨てたって書かないとおかしい気もするし。
0307nobodyさん垢版2012/11/12(月) 00:27:57.01ID:EveVvNe0
終了して放置されっぱなしのFWを晒しあげ
0308nobodyさん垢版2013/06/12(水) 11:01:59.68ID:???
今更仕事で使うことに。
モデル周りが貧弱すぎて泣きそう、はぁ・・・。
0310nobodyさん垢版2015/08/11(火) 16:43:47.48ID:6vDXB8m4
なるほど
0312nobodyさん垢版2017/12/30(土) 14:22:35.74ID:YhlYw6jg
誰でも簡単にネットで稼げる方法など
参考までに、
⇒ 『半藤のブブイウイウレレ』 というサイトで見ることができます。

グーグル検索⇒『半藤のブブイウイウレレ』

6ZDPJY0AY1
0313nobodyさん垢版2018/02/20(火) 05:06:03.14ID:???
☆ 日本の、改憲を行いましょう。現在、衆議員と参議院の
両院で、改憲議員が3分の2を超えております。
『憲法改正国民投票法』、でググってみてください。国会の発議は
すでに可能です。平和は勝ち取るものです。お願い致します。☆☆
0314nobodyさん垢版2018/06/20(水) 22:34:32.69ID:UnZq46Ab
プログラミングを誰でも習得できる方法は、「前場アキドルのプログラミングマスター方法」というブログで見られるらしいよ。ネットで調べると見られるらしいです。

YBS4T
レスを投稿する


ニューススポーツなんでも実況