ホームページ > バックエンド開発 > PHPチュートリアル > Zend Framework+smarty の使用例の詳細説明、zendsmarty_PHP チュートリアル

Zend Framework+smarty の使用例の詳細説明、zendsmarty_PHP チュートリアル

WBOY
リリース: 2016-07-12 08:56:38
オリジナル
790 人が閲覧しました

Zend Framework+smarty の使用例、zendsmarty の詳細な説明

この記事の例では、Zend Framework+smarty の使用例について説明します。参考のために皆さんと共有してください。詳細は次のとおりです:

1. Zend フレームワークの概要

Zend Framework は Model-View-Controller (MVC) 構造を使用します。これは、プログラムをさまざまな部分に分割し、開発とメンテナンスを容易にするために使用されます。

Zend Framework の実行には次のものが必要です: PHP 5.1.4 (またはそれ以降)、Web サーバーは mod_rewrite 関数をサポートし、この例では Apache を使用します。 ここ http://framework.zend.com/download から Zend Framework をダウンロードします。形式は .zip または .tar.gz の 2 つがあります。

2. Zend フレームワークの構成

1. ディレクトリ構造

Zend Framework は標準のディレクトリ構造を使用することを要求していませんが、依然としていくつかの共通のディレクトリ構造が存在します。このディレクトリ構造は、Apache の構成を完全に制御できることを前提としています。 (以下ではこのマシンを例として使用します。状況に応じて変更を加える必要があります。私のサーバーのルート ディレクトリは Web フォルダーを指します)

引用:

ウェブ/ テスト/
/ウェブアプリ
/コントローラー
/モデル
/テンプレート
/templates_c
/図書館
/ウェブルート
/画像
/js
/css

プログラム内のモデル、ビュー、コントローラー ファイルを異なるサブディレクトリに分離しました。サポートされている画像、スクリプト、CSS ファイルは、webroot ディレクトリの下のさまざまなサブディレクトリに保存されています。ダウンロードした Zend Framework ファイルはライブラリ ディレクトリに配置されます。他のライブラリ ファイルが必要な場合は、ここに配置できます。この例では、Smarty テンプレート テクノロジを使用しているため、Smarty ライブラリ ファイルもライブラリ ファイルの下に配置する必要があります。

2. スタートアップファイル

1) .htaccessを設定します

プログラムへのアクセスには単一のエントリ ファイルindex.phpを使用します。これにより、プログラム内のすべてのページの中心点が提供され、実行環境が正しく構成されていることを確認できます。この目的を達成するために .htaccess ファイルを使用します。次の内容の .htaccess ファイルを test のルート ディレクトリに追加します。 リーリー

2) Apache を構成する

同時に、Apache の設定をいくつか行って、Apache 設定ファイル httpd.conf を開く必要もあります。


1.「#LoadModule rewrite_module modules/mod_rewrite.so」という文を見つけて、その前の # を削除します。

2. 次に、「AllowOverride None」を見つけて「AllowOverride All」に変更し、Apache を再起動します。

3. ファイルindex.phpを開始します

index.php は test のルートディレクトリに配置されます。index.php の内容は次のとおりです。:

リーリー

4) 起動ファイルの説明


Zend Framework は、すべてのファイルが include_path に含まれるように設計されています。また、後でモデル クラスを簡単にロードできるように、モデル ディレクトリをインクルード パスに含めます。まず、Zend_Loader クラスにアクセスできるように、Zend/Loader.php をインクルードする必要があります。Zend_Loader クラスには、他の Zend Framework クラスをロードできる静的メソッドがあります。たとえば、次のとおりです。 リーリー

Zend_Loader::loadClass は、指定されたクラスをロードします。これは、アンダースコアをパス区切り文字に変換し、最後に .php 接尾辞を追加することによって実装されます。このようにして、クラス Zend_Controller_Front が Zend/Controller/font.php からロードされます。クラス ライブラリで同じ命名規則を使用している場合は、Zend_Loader::loadCass() を使用してそれらをロードできます。コントローラー クラスとルーティング クラスをロードする必要があります。

フロントエンド コントローラーはルーティング クラスを使用して、要求された URL を正しい PHP 関数にマップし、ページを表示します。ルーティングが機能するためには、URL のどの部分が Index.php へのパスであるかを解決し、その時点以降の URL 要素を検索できるようにする必要があります。

どのディレクトリでコントローラーを探すかを認識できるように、フロントエンド ルーターを構成する必要があります。

リーリー

例外をスローするように設定しますが、サーバーが実際に動作した後は、ユーザーにエラー メッセージを表示すべきではありません。

リーリー

この例では Smarty テンプレート テクノロジーを使用しているためです。したがって、ZF 自体に付属するビューを閉じます。 $frontController->setParam('noViewRenderer', true); 後でジャンプするための URL を設定しやすくするために、ベース アドレスを設定します。 $frontController->setBaseUrl('/test');Zend_Registry::set('font', $frontController);次に、Smarty をセットアップします。まず、クラス ライブラリの Smarty.class.php クラスを参照しました。そして、その経路は政府がその位置を把握できるように設定されています。 :

リーリー

ここでは、ZF のオブジェクト レジストリ (レジストリ) を使用して $view を保存し、プログラム内の他のパーティから $view を呼び出して操作を実行できるようにします。 Zend_Registry::set('views', $views); 設定後、プログラムを実行します。 $frontController->dispatch();

この時点で、 http://127.0.0.1/test を実行してテストします。 「致命的エラー: キャッチされない例外 'Zend_Controller_Dispatcher_Exception' とメッセージ '無効なコントローラーが指定されました (インデックス)' 」のようなエラーが表示されます。これは、プログラムがまだセットアップされていないためです。

3. セットアッププログラム

在设置文件以前,理解Zend Framework 如何组织页面很重要。每个应用程序的页面叫做 action ,许多 action 组成控制器。例如,对于这样一个格式的 URL http://localhost/test/news/view/id/1 来说,控制器是news, action 是view,后面的id和1,分别是往这个actionView传递的参数和值。

Zend Framework 控制器把 index 作为一个缺省的action 而保留为特别的action。这样,对于http://localhost/test/news/ 这样的url,在news控制器里的 index action将被执行。Zend Framework 也保留了一个缺省的控制器,也叫做index。这样,http://localhost/test/ 将执行 index控制器下的 action index。

4、设置控制器

现在可以设置控制器了。在Zend Framework 里,控制器是一个必需被叫做{Controller name}Controller 的类。注意{Controller name}必需以大写字母开头。并且,这个类必须在叫做{Controller name}Controller.php这样的文件中,这个文件还必需在特定的控制器目录中。强调一下,{Controller name}必需以大写字母开头并其他字母一定是小写。每个action是在控制器类里的public 函数,名字必需是{action name}Action。在这里,{action name}应该以小写字母开头。这样在文件 test/webapp/controllers/IndexController.php 里我们的控制器类叫做 IndexController,位置:test/webapp/controllers/IndexController.php:

<&#63;php 
class IndexController extends Zend_Controller_Action 
{ 
function init()
{
} 
function indexAction() 
{ 
} 
function addAction() 
{ 
} 
} 
&#63;>

ログイン後にコピー

我们现在有三个我们想使用的action,直到我们设置好视图,它们才工作。其中function init是个特殊的函数,简单的说,它就是在controller中的构造函数时调用的函数。

每个action的 URL 如下:

http://localhost/test/ in IndexController::indexAction()
http://localhost/test/index/add in IndexController::addAction()

现在,我们在程序里有个能工作的路由器和每个页面的 action。

5、设置视图

因为本实例使用的的是Smarty模版,所以和ZF本身的View视图在实现过程中,稍微有点区别!下面我直接介绍在ZF里是任何使用Smarty的。在使用Smarty之前,我们应该先取出在index.php里定义的$view,并且定义好,需要在模版显示的变量。:

class IndexController extends Zend_Controller_Action 
{ 
var $views; /*模板对象*/
var $data; /*传递模版变量的对象*/
function init()
{
//拿回注册过的对象
$this->views = Zend_Registry::get('views'); 
} 
function indexAction() 
{ 
//定义模版显示的变量 
$data[`title′]=〞hello world〞;
//传递变量到模版
$this->views->assign($data);
//显示模版
$this->views->display('index/index.tpl'); 
} 
function addAction() 
{ 
} 
}

ログイン後にコピー

下面我们开始做视图文件,它们的位置是test/webapp/templates/index/index.tpl:

代码:

{$title}

ログイン後にコピー

这个时候,输入http://127.0.0.1/test看看。应该会出现“hello world 了。

这样,一个简单的实例就完成了。下面我们结合Xmlrpc技术来实现一个稍微复杂一点的实例!

三、XMLRPC

1、什么是XMLRPC

XMLRPC,顾名思义,就是应用了XML技术的RPC。那么什么是XML和RPC了?

RPC是Remote Procedure Call的缩写,翻译成中文就是远程过程调用,是一种在本地的机器上调用远端机器上的一个过程(方法)的技术,这个过程也被大家称为“分布式计算 ,是为了提高各个分立机器的“互操作性 而发明出来的技术。

XML和RPC一样也是一个东西的缩写,这个东西就是eXtensible Markup Language,中文意思就是可扩展标记语言,标记语言就是那种用尖括号(<>)括来括去的那种语言,比如说HTML。XML的可扩展性也体现在它只定义了语言的格式,而并没有定义过多的关键字,也就是通常所说的标记(Tag),所以用户可以自由地选择定义标记。它的这种自由和简单的语法规则也使得它广为流传,用来表示各种数据。

2、在ZF中使用XMLRPC

1)创建IndexController.php

下面我们来完成一个实例,为了方便起见,就不建立新的Controller,把刚才我们建立的IndexController修改一下,就能使用了!另外我们还需要建立一个XMLRPC的服务端程序。位置在WEB服务器的根目录上(在本机中,也就是在test文件的上级目录中,取名为1.php),由于XMLRPC使用到了类库,我们还需要下载libphpxmlrpc放在library文件夹下!

文件位置:test/webapp/controller/IndexController.php:

class IndexController extends Zend_Controller_Action 
{
var $views; /*模板对象*/
var $data; /*传递模版变量的对象*/
public function init()
{
//拿回注册过的对象
$this->views = Zend_Registry::get('views'); 
$this->font = Zend_Registry::get('font'); 
//得到基地址 
$this->baseurl=$this->font->getBaseUrl();
}
function indexAction() 
{ 
@include "libphpxmlrpc/xmlrpc.inc";
@include "libphpxmlrpc/xmlrpcs.inc"; 
if (isset($_POST['var1']) && isset($_POST['var2'])) 
{ 
//创建客户端
$client = new xmlrpc_client('http://127.0.0.1/1.php');
//创建一个实例
@ $msg = new xmlrpcmsg("add", array(
new xmlrpcval($_POST['var1'], "int"),
new xmlrpcval($_POST['var2'], "int")));
//发送信息,
$response=$client->send($xmlrpc_message);,服务器返回xmlrpcresp的一个实例
$retval = $client->send($msg);
if ($retval->faultCode()) 
{
print_r("发生一个错误: "); 
print_r("原因: " . htmlspecialchars($retval->faultString())); 
} 
else 
{
//$retval->value()获取应答的xmlrpcval(也就是服务器端返回的结果),
$retval->value()->scalarval();得到描述应答结果的PHP变量
$sum = $retval->value()->scalarval();
}
}
@$data['var1']=$_POST['var1'];
@$data['var2']=$_POST['var2'];
@$data['sum']=$sum; 
@$data[`action′]= "$this->baseurl/index/"; 
//构造完整的url给模版 
$time=date("Y-m-d H:i:s")
@$data['url']="$this->baseurl/index/add/id/$sum/time/$time"; 
/传递变量到模版
$this->views->assign($data);
//显示模版
$this->views->display('index/index.tpl'); 
} 
function addAction() 
{ 
$data['title']="实验一下"; 
//得到传递的值 
$id=$this->_request->getParam("id");
$time=$this->_request->getParam("time"); 
$data['id']="$id";
$data['time']="$time";
$this->views->assign($data);
$this->views->display('index/add.tpl'); 
}
}

ログイン後にコピー

2)创建显示模版文件

位置:test/webapp/templates/index/index.tpl:

hello,下面演示的是利用Xmlrpc调用远程服务器方法的实例!并且我们把得到的结果传递到另外的一个函数中去!

代码:

{if $sum}
点一下看看!
{/if}

ログイン後にコピー

位置: test/webapp/templates/index/add.tpl:

现在是{$time}
{$title}你刚才传递的是 {$id}

ログイン後にコピー

3)创建XMLRPC服务器端程序

位置:web/1.php:

<&#63;php
@include ("libphpxmlrpc/xmlrpc.inc");
@include ("libphpxmlrpc/xmlrpcs.inc");
if ($_SERVER['REQUEST_METHOD'] != 'POST')
{
exit(0);
}
$add_sig = array(array($xmlrpcString, $xmlrpcInt, $xmlrpcInt));
$add_doc = "Add the two integer together";
function add($params)
{
//引入用户错误代码值
global $xmlrpcerruser;
//返回一个PHP数组
$val = php_xmlrpc_decode($params);
$ret = $val[0] + $val[1];
return new xmlrpcresp(new xmlrpcval($ret, "int"));
}
//创建一个xmlrpc_server的实例:
$server = new xmlrpc_server(array(
"add" => array(
"function" => "add",
"signature" => $add_sig,
"docstring" => $add_doc
)));
&#63;>

ログイン後にコピー

OK,现在打开http;//127.0.0.1/test/看看。刚才建立的那个XMLRPC应该已经建立起来了,输入数字,测试一下吧!

さらに Zend 関連のコンテンツに興味のある読者は、このサイトの特別トピックをチェックしてください: "Zend FrameWork Framework 入門チュートリアル"、"php 優れた開発フレームワークの概要"、"Yii Framework Getting Started and Summary of Common Techniques"、" ThinkPHP入門チュートリアル』、『PHPオブジェクト指向プログラミング入門チュートリアル』、『php+mysqlデータベース操作入門チュートリアル』、『php共通データベース操作スキルまとめ』

この記事が皆さんのzendフレームワークをベースにしたPHPプログラムの設計に役立つことを願っています。

興味があるかもしれない記事:

  • とても使いやすい Zend Framework ページング クラス
  • Zend Framework のカスタム ヘルパー クラスに関する注意事項のまとめ
  • Zend Framework チュートリアルでの Bootstrap クラスの使用法の概要
  • の基本Zend Framework チュートリアルのアクション Zend_Controller_Action クラスの詳細な説明
  • Zend Framework がクラスを自動的にロードする方法の分析
  • Zend Framework が検証コードを生成し、検証コード検証関数を実装します (デモのソース コードのダウンロード付き)
  • Zend Framework フレームワークの Zend_Mail が検証を実装しますメール送信機能とタイトル文字化けの解決方法
  • Zend Framework チュートリアル Zend_Form コンポーネントはフォーム送信を実装し、エラー プロンプトを表示
  • Zend Framework は複数のファイル アップロード機能を実装するサンプル
  • Zend Framework と最初の Hello World を始めるための環境構成例 (デモソースコードのダウンロード付き)
  • Zend Framework 入門知識のまとめ
  • Zend Framework の基本的なページ レイアウト分析
  • Zend Framework ページング クラスの使用方法の詳細な説明

www.bkjia.com本当http://www.bkjia.com/PHPjc/1111890.html技術記事 Zend Framework+smarty の使用例を詳しく解説、zendsmarty この記事では、Zend Framework+smarty の使用例を例を挙げて説明します。参考のために皆さんと共有してください。詳細は次のとおりです: 1. Zend Framework の紹介...
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート