Git Product home page Git Product logo

ethna's Introduction

Ethna

Build Status

Ethna(えすな)は、PHPを利用したウェブアプリケーションフレームワークで、絶妙に妥協をモットーとしています。

Current Status

2.7.x-dev

Getting Started

composerのcreate-projectを使うことで簡単に新規プロジェクトの作成が行えます。

composer create-project ethna/ethna-project -s dev {ProjectName}

初期インストールが終わるとプロジェクトのセットアップ用にいくつか入力すると よしなにやってくれるはずです。

php -S localhost:8080 -t www

あとは大抵built in serverで開発できると思います。 ethnaコマンドはvendor/bin/ethnaになってるので間違えないよう。

How to update

create-projectした後にappディレクトリとかの中身をコピペするのが多分すこしは楽です。 が、どちらにしろ大変だと思うのでがんばって!

Requirements

  • PHP 5.3.3 higher

License

The BSD License

Copyright (c) 2004-2005, Masaki Fujimoto All rights reserved.

ethna's People

Contributors

chobie avatar dqneo avatar ledmonster avatar milly avatar mumumu avatar nulltask avatar polidog avatar riaf avatar ryuzo98 avatar sasezaki avatar sotarok avatar ucchee avatar withgod avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

ethna's Issues

Plugin/Abstract.phpでの$this->configがArrayになってしまっている件

問題点

class/Plugin/Abstract.phpを導入した際に、
$this->configというプロパティが配列として宣言されています。

    /** @protected    array   plugin configure */
    protected $config;

これはいろいろ問題点があると思います。

  • もともとプラグインの$this->configはEthna_Configオブジェクトを格納していた。同じ名前のまま中身がArrayに変わってしまうと、後方互換が損なわれる。
  • class/Plugin/Handle/PearLocal.phpにおける$this->configはオブジェクトであり、一貫性がない。
  • $configは慣習的にEthna_Configを指すので、ここだけ配列だと混乱のもとになる。
  • 実際にはPlugin/Cachemanager*でしか使われていない。

改善案

その1 名称を$this->configではなく$this->optとする。

その2 ソースコードが無駄に複雑になってしまっているので、
class/Plugin/Abstract.phpには実装せず、
class/Plugin/Cachemanager.phpに実装する。

上記2つの改善案を提案いたします。

Smarty3 用に setter/getter APIの置き換え

array|string getTemplateDir( [string $index] )
replaces $smarty->template_dir; and $smarty->template_dir[$index];

Smarty setTemplateDir( array|string $path )
replaces $smarty->template_dir = "foo"; and $smarty->template_dir = array("foo", "bar");

Smarty addTemplateDir( array|string $path, [string $index])
replaces $smarty->template_dir[] = "bar"; and $smarty->template_dir[$index] = "bar";

etc.

smarty のデリミタ変更時に unittest が表示できない

config で smarty のデリミタを変更している場合、unittest の標準テンプレートで表示できません。
Controller::getRenderer() で unittest 用の処理が記述されていますが、
それが呼び出される前に UnitTestCase が ctl->action_name を変更してしまうためです。

Controller::_trigger_WWW() であらかじめ呼び出しておけばよいでしょうか?

--- a/lib/Ethna/class/Controller.php
+++ b/lib/Ethna/class/Controller.php
@@ -1002,6 +1002,11 @@ class Ethna_Controller
         }
         $this->action_name = $action_name;

+        // アクションが __ethna_unittest__ の場合、事前にレンダラーを生成しておく
+        if ($this->action_name == '__ethna_unittest__') {
+            $this->getRenderer();
+        }
+
         // オブジェクト生成
         $backend = $this->getBackend();
         $session = $this->getSession();

UrlHandler $action_regexp_index bugs.

From ML ([ethna-users:1253]):

Ethna_UrlHandler.php
requestToAction関数内、254行目の break;

以上の箇所で、
foreach ($action_map as $key => $value) ループを抜けていないようです。

$action, $action_match が他の条件で上書きされ、
$action_regexp_index の値だけが残る場合があり、誤動作します。

Ethna i18n を ini ファイルで利用させるオプションをdisable(または削除)させることの検討

Ethna の i18n まわりの処理が 2.5.0 stable では処理時間の半分近くを占めるという指摘があった。

http://twitter.com/hnw/status/5173554984

これを踏まえていろいろとコードを書き換えて見たのだが、有意な差を出すには至っていない。 ベンチマークは以下のapdを使ったものを参照。

http://www.mumumu.org/~mumumu/ethna_master_trace.txt

i18nの機能自体を必要としている人がそもそも思われる現状では、この遅いコードをデフォルト で有効にしておくことは問題であると考えられる。よって、以下の選択肢を検討していく。

  1. i18n の機能を disable にするかどうかを選べるようにする(デフォルトdisable)
  2. 高速な gettext 一本に絞る

ActionForm::checkVendorCharがEUC依存

【提案】

下記のようにUTF8と他の文字コードで往復変換して戻らないものをはじくというのはどうでしょうか?

    $tmp          = mb_convert_encoding($string, $dst, $src);
    $roundTripped = mb_convert_encoding($tmp,    $src, $dst);
    if ($string !== $roundTripped) {
        $this->ae->add($name, '{form} に機種依存文字は使用できません', E_FORM_INVALIDCHAR);
     }

beta3:フォームで配列の受け渡しがうまく動作しないようです

チェックボックスやhiddenで、配列を受け渡しするとき
http://d.hatena.ne.jp/obys/20070422/1177253129

次の画面に進むと
ほげには配列を入力して下さい
と errors に格納され、うまく受け渡しが出来ないようです…。

htmlで
 <input type="hidden" name="hoge[]" value="1" />
 <input type="hidden" name="hoge[]" value="2" />

action で フォーム定義を
 'hoge' => array('type' => array(VAR_TYPE_STRING))

でNGです。

※また、validate() しない場合でも errors にこのメッセージが格納されます。
 (配列かどうかのチェックは強制動作する仕様なのでしょうか?)

ファイル名にappidがつくことの是非について

etc/{appid}-ini.php
log/{appid}.log
についての提案です。

単純に、
etc/ethna-ini.php
log/ethna.log
とした方がわかりやすいのではないでしょうか?

■理由
① Google検索でヒットしやすいので、ノウハウを共有しやすい。初心者にやさしい。
 (例: .zshrcとか.emacsとかみたいに)

② tail -f とかするときにいちいちappidを考えなくて済む。
  2つも3つも異なるサイトを運営していると、シェルでappidを打ち間違えたりします。
tail -f log/ethna.log のように名前が固定されている方が楽です。

ご検討よろしくお願いします。

Ethna_AppObject.php内のfetchRow()

メーリングリストが稼動していないようでしたのでブログに載せました。

http://www.remix.gr.jp/service/blog/2013/06/ethna_appobject.html

Ethna_AppObject.php内のfetchRow()を呼び出している5箇所。

636行目、650行目、692行目、706行目、793行目

$r->fetchRow( DB_FETCHMODE_ASSOC );ではないでしょうか。

Ethna 2.6 でもソースは同じようです。

私の思い違いでしたらスミマセン。 また、Github の使い方を間違っておりましたらスミマセン。

確認環境  Ethna-2.5.0  Smarty Version 2.6.26  PHP Version 5.3.3  CentOS release 6.4 (Final)

ethna-action-testでCannot access protected propertyとなる。

ethna add-action-testでアクションのテストケースを作成し、unittest.phpを実行した場合、
Cannot access protected propertyのエラーが発生する。

Ethnaバージョン:
ethna-ethna-2.6.0beta3-0-g8ba873d

報告のみで申し訳ございません。

protected/privateの使い分けについて

Ethna_* クラス群でメソッドがprivate宣言されていると、子クラス側から呼び出すことができません。

そもそもEthnaのアーキテクチャは、Ethna_*クラスをプログラマが継承して使うので、Ethna側は基本的にprotectedでよいと思うのですががいかがでしょうか。

「妥協」をスローガンにするなら、このprivateはちょっと厳しいと思います。

私が管理しているショッピングサイトでEthna2.6.0を導入しようとして、このprivateで苦労しています。

  • Controllerで_trigger_WWWをオーバーライドすると、_getActionNameが呼び出せない
  • ActionErrorでaddObjectをオーバーライドすると、_getActionFormと_getLogger が呼び出せない

add-entry-point の挙動と仕様

元: http://sourceforge.jp/ticket/browse.php?group_id=1343&tid=16102

ethnaコマンドの add-entry-point は、アクション名を引数として取り、アクション名のエントリポイントを作成する挙動となっていますが、これは実際に使われているものなのかが疑問です。
作成すると、エントリポイント名のアクションも自動生成するのは、挙動として分けた方がいいのではないか。
アクション名ではなく、パス名として指定する必要があるのではないか。 仕様を要検討。
また作成されるエントリポイントが、app/APPID_Controller.phpへのパスがフルパスになっているので、相対パスへ変更する必要があると思います。

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.