のくす牧場
コンテンツ
牧場内検索
カウンタ
総計:127,062,765人
昨日:no data人
今日:
最近の注目
人気の最安値情報

    私的良スレ書庫

    不明な単語は2ch用語を / 要望・削除依頼は掲示板へ。不適切な画像報告もこちらへどうぞ。 / 管理情報はtwitter
    ログインするとレス評価できます。 登録ユーザには一部の画像が表示されますので、問題のある画像や記述を含むレスに「禁」ボタンを押してください。

    元スレ【PHP】Ethna part.2【国産フレームワーク】

    php スレッド一覧へ / php とは? / 携帯版 / dat(gz)で取得 / トップメニュー
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。
    レスフィルター : (試験中)
    1 2 3 4 5 6 7 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitter
    1 : nobodyさん - 2007/08/03(金) 08:15:18 ID:BNMV6wHx.net (+125,-30,-183)
    国産フレームワーク、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/
    2 : nobodyさん - 2007/08/03(金) 08:22:09 ID:BNMV6wHx.net (+35,-30,-168)
    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/
    4 : nobodyさん - 2007/08/04(土) 17:47:54 ID:???.net (-27,-30,+0)
    既存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);
    }
    6 : nobodyさん - 2007/08/19(日) 22:21:51 ID:???.net (-27,-30,-72)
                 o
                 /  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ /
                / Web1.0時代を担った   /
               / このフレームワークは無事に /
               / 開発を終了致しました  /
              / ありがとうございました  /
              /                /
             /    モナーより      /
             / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄/
      ∧_∧  /                /∧_∧
     ( ´∀`) /                /(´∀` )
     (     つ               ⊂     )
     | | |                   | | |
     (__)_)                  (_(__)
    16 : nobodyさん - 2007/08/30(木) 11:41:22 ID:???.net (-27,-30,+0)
    >>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から以外は接続しないため、これは設定しない形で終えました。
    解決の糸口を下さった方々に感謝致します。本当にありがとうございました。
    17 : nobodyさん - 2007/08/30(木) 15:25:18 ID:???.net (+19,+24,-18)
    >>16
    あっ。俺もその問題なったよw
    違うフレームワークだけどさ。
    同じようにlocalhostはずしたら動いた。
    22 : nobodyさん - 2007/09/09(日) 01:19:37 ID:???.net (-21,-19,-30)
    PEARがなくても動くCakePHPにしたよ。
    25 : nobodyさん - 2007/09/09(日) 11:45:09 ID:???.net (+27,+29,-21)
    単に凍結してなかったから編集されただけだろ。
    ロボットに釣られんなよ。
    26 : nobodyさん - 2007/09/12(水) 07:43:28 ID:???.net (+47,+29,-10)
    AppObject周りをがっつりレビューしてるサイトないかなぁ
    ORM初めて何でなかなかコツが掴めない
    27 : nobodyさん - 2007/09/12(水) 10:00:03 ID:???.net (-10,-8,-43)
    AppObjectはコミッターの人たち使ってないらしいからな・・
    itohさんとかriafさんとかのブログでいくつか記事があるかな。
    28 : nobodyさん - 2007/09/12(水) 23:01:07 ID:???.net (+25,+29,-3)
    そうなのか。

    そのブログ当たってみます
    ありがとう
    30 : nobodyさん - 2007/09/13(木) 02:45:30 ID:???.net (+51,-29,-33)
    >>28
    自分も相当AppObject/AppManagerは使ってるから分からなかったら
    ここで答えるよ。
    31 : nobodyさん - 2007/09/13(木) 07:49:48 ID:???.net (-27,-30,-233)
    何々がわからないって質問できるほど理解してないだなこれが

    例えば、
    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を合成してほげほげとかもあると最高
    33 : nobodyさん - 2007/09/14(金) 03:30:34 ID:???.net (-27,-30,+0)
    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 {
       //無いとき
      }
    お目汚し失礼しました。
    34 : 30 - 2007/09/14(金) 03:44:54 ID:???.net (-27,-30,+0)
    >って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());
    35 : 30 - 2007/09/14(金) 03:45:29 ID:???.net (-27,-30,-247)
    このとき使ってるのが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すればわかる。
    36 : 30 - 2007/09/14(金) 03:46:35 ID:???.net (-27,-30,-302)


    実際はこれだけだと意味がないんで、
    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);
    }
    ってやる。
    37 : 30 - 2007/09/14(金) 03:47:13 ID:???.net (-27,-30,-235)
    さらに、
    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()でエラー起こしてないか
    チェックするんだけど。
    38 : 30 - 2007/09/14(金) 03:48:27 ID:???.net (-27,-30,-209)
    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に入る。
    39 : 30 - 2007/09/14(金) 03:49:19 ID:???.net (-27,-30,-292)

    まだ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();
    }
    }
    ってやって、有効性を確認する。


    40 : 30 - 2007/09/14(金) 03:50:25 ID:???.net (-27,-30,-106)
    で、AppManagerからAppObjectを一括取得して、一括Updateとか掛けたい場合は、
    Ethna_AppManager::getObjectListを使う。getObjectPropListは配列を返したけど、
    getObjectListは第二引数がAppObjectを要素に持った配列になってる。当然getObjectPropListより重いよ。
    42 : 26,33 - 2007/09/14(金) 07:57:02 ID:???.net (+27,+29,-1)
    おお、ありがとうございます。
    週末試しまくります。
    ありがとうありがとう。
    48 : nobodyさん - 2007/09/25(火) 19:49:41 ID:???.net (-27,-30,-195)
    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);
    とかエントリポイントで指定できて便利とか。
    49 : nobodyさん - 2007/09/27(木) 17:12:13 ID:???.net (-24,-29,-67)
    ある入力画面で、マスタの数によってINPUTの数が変わる画面があるんですが、
    アクションフォームの定義の仕方がわかりません
    $_POST等を直接弄るしか無いんでしょうか・・・
    1 2 3 4 5 6 7 次へ→ / 要望・削除依頼は掲示板へ / 管理情報はtwitterで / php スレッド一覧へ
    スレッド評価: スレッド評価について
    みんなの評価 :
    タグ : 追加: タグについて ※前スレ・次スレは、スレ番号だけ登録。駄スレにはタグつけず、スレ評価を。荒らしタグにはタグで対抗せず、タグ減点を。

    類似してるかもしれないスレッド


    トップメニューへ / →のくす牧場書庫について