ThinkPHP 3.1のWidgetの新しい使い方

1936 ワード

ThinkPHP 3.0バージョンのWidgetは、ActionとViewのサポートが相対的に不足しており、基本的なテンプレートレンダリング出力のみを実現できます.3.1バージョンのリリースがもたらす多層MVC機能は、Widgetを実現する方法に新しい考え方をもたらし、どのように実現するかを見てみましょう.ThinkPHP 3.1は多層MVCのサポートを追加したため、3.1バージョンは多層のコントローラ機能をサポートすることができ、これによってコントローラ層にもう1層:Widget層を追加することができる.
まず、プロジェクトのLibディレクトリの下にWidgetディレクトリを作成し、TestWidgetクラス(Lib/Widget/TestWidget.class.php)を作成します.

class TestWidget extends Action{
  public function hello($name=''){
    echo ("hello,".$name."!");
  }
 }

TestWidgetと以前の違いは、Widgetクラスを継承するのではなく、直接Actionクラスを継承することであり、テンプレートへのレンダリング出力を含むTestWidgetでActionを直接呼び出す方法を意味する.
定義が完了したら、このWidgetをどのように呼び出しますか?W法では通用しないに違いないが、今回はR法で出場する必要がある.Rメソッドの役割は、リモートコールモジュールの操作ですが、3.1は、すべてのコントローラレイヤを呼び出す操作方法をサポートする新しい役割を果たします.したがって、テンプレートでWidgetを呼び出すことができます.

{:R('Test/hello',array('ThinkPHP'),'Widget')}

ページ内の領域出力を実現できます.

hello,ThinkPHP!

Actionコントローラ以外のコントローラ層はURLで直接アクセスできないため,このWidgetメソッドはRメソッドで内部呼び出しのみ可能である.
TestWidgetクラスでModelを呼び出して他のデータを出力することができます.独自のテンプレートをレンダリングする必要がある場合は、displayメソッドを直接呼び出すことができます.

class TestWidget extends Action{
  public function hello($name=''){
    $this->assign('name',$name);
    $this->display('Test:hello');
  }
 }

プロジェクトのTpl/Test/ディレクトリの下にhello(Tpl/Test/hello.html)テンプレートファイルを作成し、出力を追加します.

Hello,{$name}!

以前のWidgetと同じようにテンプレートファイルを現在のディレクトリの下に配置する場合は、次の操作を行います.

class TestWidget extends Action{
  public function hello($name=''){
    $this->assign('name',$name);
    $this->display(dirname(__FILE__).'/Test/hello.html');
  }
 }

このとき、さっき定義したhelloテンプレートファイルをWidget/Test/ディレクトリの下に入れることができます.