2016-03-24 6 views
0

MVCパターンを使用してビューaを定義し、コントローラ経由で変数をロードする方法が本当に便利です。引数のために、私たちは、一例として、CodeIgniterのを見てみましょう:フレームワークなしでMVCビューのようなパターンを実現する方法

コントローラー:

Class Example extends CI_controller(){ 
      function show_page(){ 
       $data = array('msg'=>'Hello World'); 
       echo $this->load->view('hello',$data); 
      } 
} 

ビュー(hello.php):私は書か年前の古いプロジェクトを引き継いでいる

<h1><?php echo $msg; ?></h1> 

どこにも冗長なHTMLコードがあります。構造化されていないコードはまっすぐにまっすぐにパターンがありません。

1つのフォルダ内のファイルからすべてのHTMLコードを取得し、変数に渡して結果を表示する関数を持つクラスを作成したかったのです。これと同じように:

フォルダ構造:

View_folder 
    - hello.php 
Class 
- view_class.php` 

メイン:

<?php 
$data['msg'] = 'Hello World!'; 
echo $view_class->get_view('hello.php',$data); 
?> 

は、それがこれを達成することは可能ですか?誰かがこれを行う方法の例の機能を与えることができます。ありがとう。

+1

それはもちろん、ですが、既存のフレームワークは、(CIのような)これをすでに取り組んだ、数多くのバグやケースを使用しています。あなたがこの道を下っていくと、あなたはそのようなフレームワークで働いていたコーダーがすでにしたことをやっているだけです。既存のフレームワークを使用できない理由はありますか? – Technoh

+0

。実際、私はこのシステムがどのように組み合わされているかを見て、毎日頭を振って働いています。 2.0バージョンは、間違いなくフレームワークを実装します。しかし、既存のシステムは、バージョン2.0が実装される前に、少なくとも1年または2つの平均寿命があります。加えて、なぜこの問題を解決できないのであれば、このクライアントのメンタリティは 'ありますか?新しい機能を追加するだけです。 – Elymentree

+0

私は共感できます!私は何年も前から頭が震えている。私は依然としてクライアントからの要求と全く同じものを得ています。それは、より古くなったり一緒にコードをスローしたりするのに苦労することに同意します。しかし、自分でコントローラー/ビューシステムを作成する道を辿ると、滑りやすい斜面だと思うでしょう。 – Technoh

答えて

0

確かに、それはフレームワークがやっていることです。ここで私はそれが動作するように期待するかの本当に基本的な概要を示します:

function view($template, $data){ 
    extract($data);  // this pulls all of the first-level array keys out as their own separate variables 
    ob_start();   // this turns on **output buffering** which is the method we'll use to "capture" the contents of the view (there are surely other ways) 
    require $template; // you should prepend some sort of fixed path to this where all of your templates will reside 
    echo ob_get_flush(); // turns off output buffering, returning the buffered content as a string which we then send to the browser. 
} 
+1

素晴らしい!これは私を助けました。 MVCのフレームワークに関する意見を述べるのではなく、実際に問題に取り組んでいます。 – Elymentree

+0

これは、ビューを表示するのではなくテンプレートを表示するための関数です。 –

+0

@tereško、分かりました。そういうわけで、私の反応は「これは私をたくさん助けました」と言い、自分のニーズに合わせて調整する必要があります。ありがとう。 – Elymentree