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)を作成します.
定義が完了したら、このWidgetをどのように呼び出しますか?W法では通用しないに違いないが、今回はR法で出場する必要がある.Rメソッドの役割は、リモートコールモジュールの操作ですが、3.1は、すべてのコントローラレイヤを呼び出す操作方法をサポートする新しい役割を果たします.したがって、テンプレートでWidgetを呼び出すことができます.
TestWidgetクラスでModelを呼び出して他のデータを出力することができます.独自のテンプレートをレンダリングする必要がある場合は、displayメソッドを直接呼び出すことができます.
まず、プロジェクトの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/ディレクトリの下に入れることができます.