2011-07-12 8 views
3

私はPHPで書かれたかなりの量のレガシーコードを持っています。これは特定のフレームワークで書かれたものではなく、たいてい旧式のPHP(つまりインライン)PHPです。しかし、私の新しいコードのほとんどはKohana 3.1.Xフレームワークに書かれています。 Kohanaは、レガシーコードとKohanaファイルの両方を同じWebサイト上に共存させることができますが、KohanaのMVCデザインパターンとURL書き換えをフルに活用したいと考えています。しかし、レガシーコードがビュー自体(レガシーコード)から定義されたグローバル変数にアクセスできず、グローバルスコープステートメントでグローバル変数を参照しようとしているインライン関数を使用できないという問題に遭遇しています。たとえば、次のようにKohanaでPHPレガシーコードをラップするにはどうすればよいですか?

アプリケーション/ビュー/ legacy.php

$gvar = 5; 

function getadminsettings(){ 
    global $gvar; 
    echo $gvar; 
} 

アプリケーション/クラス/コントローラ/ myctrl.php

... 
public function action_legacy() { 
    // call legacy.php as a view via View::factory() 
} 
... 

私はそんなにレガシーコードを持っているので、それはリファクタリングに非現実的ですこれらのレガシーコードファイルはすべて真のビューになります。これらのファイルをビューとして扱うか、ビューに似ているかのようにアクセスして、コントローラからインラインではなく(実際のMVCデザインパターンに従って)、その後で変数をバインドすることができますこれらのレガシーファイルには?

私はIn PHP, how can I wrap procedural code in a class?を見ましたが、私はKohanaフレームワークを扱っているので、このポストはこのケースでは実際には機能しません。

更新:

のKohanaは、出力バッファを使用しているように見える、従来のファイルで、このようなグローバル変数にアクセスすることができない理由です。 Kohana 3.2でグローバル変数にアクセスするには誰でも成功しましたか?

答えて

0

従来のアプリケーションをMVCスタイルのフレームワークに移動することは、カット&ペーストのアプローチには適していません。最も単純なアプリケーションであれば、コードをリファクタリングしてMVC互換にするために多大な時間と労力が必要になります。

従来のアプリケーションが動作していて、定期的に開発されていない場合は、MVCに切り替えることでほとんど利益を得られません。 MVCパターンは、しばしばオーバーヘッドをもたらし、主にエンドユーザーではなく開発者にとって有益です。

ただし、アプリケーションで定期的なメンテナンスが必要な場合は、レガシーコードをリファクタリングして新しいメソッドに合わせる必要があります。

+0

ためController_Templateを使用しているここと仮定

はい、私は、レガシーコードが定期的に維持され続けますが、私はレガシーコードベースに番号の変更を制限したいと期待しています。 – Matthew

+0

@Matthew:その場合、本格的なリファクタリングが必要だと思います。既存のコードをラップしようとすると、せいぜい脆くなり、最悪の場合には維持するのが難しくなります。 –

+0

私は、View :: factory()メソッドを使用するのではなく、特別なクラスを作成してこれらのスクリプトにアクセスするためにcURL呼び出しを使用するという考えを模索してきましたが、サーバーに負荷を追加したくありません。これがうまくいくと思いますか? – Matthew

0

私はこれを試したことはありませんが、コードをコントローラではなくビューに入れてみることができます。あなたは、コントローラ

public function action_legacy() { 
    $this->auto_render = FALSE; 

    include('legacy file'); 
    // you could cut and paste the legacy code here, but it might get to messy 
} 
関連する問題