Zend Framework+smarty用法執行個體詳解,zendsmarty_PHP教程

來源:互聯網
上載者:User

Zend Framework+smarty用法執行個體詳解,zendsmarty


本文執行個體講述了Zend Framework+smarty用法。分享給大家供大家參考,具體如下:

一、Zend Framework簡介

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。

二、Zend Framework的配置

1、目錄結構

雖然Zend Framework 沒有強求使用一個標準的目錄結構,但是還是有一些通用的目錄結構。這個目錄結構假設你完全控制Apache 的配置。(下面以本機做例子,各位需根據自己的情況變更,我的伺服器的根目錄指向的是Web檔案夾)

引用:

Web/
test/
/webapp
/controllers
/models
/templates
/templates_c
/library
/webroot
/images
/js
/css

我們已經把程式中的模型、視圖和控制器的檔案分離到不同的子目錄中。支援的映像,指令碼和CSS 檔案被存放在webroot 目錄下的不同子目錄中。下載的Zend Framework 檔案放在 library 目錄下。如果我們還需要其他庫檔案,都可以放在這裡。在這個執行個體中,我們使用到了Smarty模版技術,所以Smarty 的庫檔案我們也應該放在library檔案下!

2、開機檔案

1) 配置.htaccess

我們使用單一的入口檔案index.php來對我們的程式進行訪問,這給我們提供了程式中所有頁面的中心點並確保運行環境配置正確。我們用.htaccess 檔案來實現這個目的,添加.htaccess 檔案在test 的根目錄中,內容如下:

RewriteEngine onRewriteRule !".(js|ico|gif|jpg|png|css)$ index.php

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的內容::

<?php //開啟錯誤提示error_reporting(E_ALL|E_STRICT); //設定時區date_default_timezone_set('Asia/Shanghai'); //指明引用檔案的路徑set_include_path('.' .PATH_SEPARATOR . './library/'.PATH_SEPARATOR . './webapp/models/'.PATH_SEPARATOR . get_include_path());//必須手動載入Loader.phpinclude "Zend/Loader.php"; //自動載入類,使用時,直接執行個體化使用function __autoload($class){Zend_Loader::loadClass($class);}//getInstance()方法用來擷取前端控制器執行個體$frontController = Zend_Controller_Front::getInstance(); //設定前端路由器的工作目錄$frontController->setControllerDirectory(array("default"=>'./webapp/controllers')); //拋出異常$frontController->throwExceptions(true); //設定基地址,方便以後url的跳轉使用者,.注意,區分大小寫!$frontController->setBaseUrl('/test'); //使用smarty模版需關閉本身的視圖助手. $frontController->setParam('noViewRenderer', true); // 關閉錯誤提示,發生請求錯誤時候,轉到ErrorController的errorAction控制器//$frontController->throwExceptions(false);//對。。進行註冊Zend_Registry::set('font', $frontController);//------------配置Smarty模版 ----------------include 'Smarty/Smarty.class.php'; /*** 對smarty模版進行初始化**/$views = new Smarty();//$views->left_delimiter = "{{";//$views->right_delimiter = "}}";$views->compile_dir = './webapp/templates_c';$views->cache_dir = './webapp/templates_c/cache_c';$views->template_dir = "./webapp/templates";function smarty_block_dynamic($param,$content,&$views){return $content;} $views->register_block('dynamic','smarty_block_dynamic',false);Zend_Registry::set('views', $views);//開始運行程式$frontController->dispatch(); ?>

4)開機檔案說明

Zend Framework 是這樣設計的,所有的檔案必須包含在 include_path 中。我們也把我們的模型目錄包含在 include path 中,這樣我們以後就能很容易載入我們的模型類。一開始,我們必須 include Zend/Loader.php,這樣我們就能訪問Zend_Loader 類,在Zend_Loader 類中有靜態方法使我們能夠載入其他Zend Framework 類,例如:

Zend_Loader::loadClass('Zend_Controller_Front');

Zend_Loader::loadClass 載入已經命名的類。它是把底線轉換成路徑隔離符來實現的,並在最後加上.php 尾碼。這樣,類Zend_Controller_Front 將從Zend/Controller/font.php 載入。如果你在你的類庫裡使用相同的命名規則,就可以用Zend_Loader::loadCass()來載入它們。我們需要載入控制器類和路由類。

前端控制器用路由類來映射請求的 URL 到正確的 PHP 函數,然後顯示頁面。為了能使路由工作,需要解決 URL 的哪一部分是指向index.php 的路徑,這樣它就可以在那個點後面尋找url 元素。

我們需要配置前端路由器,這樣它就知道從哪個目錄裡找出我們的控制器。

$frontController = Zend_Controller_Front::getInstance(); $frontController->setControllerDirectory('./application/controllers');

設定拋出異常,但是在伺服器真正工作以後,我們不應該顯示錯誤資訊給使用者看。

$frontController->throwExceptions(true);

由於在本執行個體中我們使用Smarty模版技術。所以我們關閉ZF本身內建的view。$frontController->setParam('noViewRenderer', true);設定基地址,方便以後設定url來進行跳轉。$frontController->setBaseUrl('/test');Zend_Registry::set('font', $frontController);接下來,我們對Smarty進行設定。首先我們在類庫中引用了Smarty.class.php這個類。並且對它的路徑進行了設定,以便讓ZF知道它的位置。:

include 'Smarty/Smarty.class.php'; /*** 對smarty模版進行初始化**/$views = new Smarty();//$views->left_delimiter = "{{";//$views->right_delimiter = "}}";$views->compile_dir = './webapp/templates_c';$views->cache_dir = './webapp/templates_c/cache_c';$views->template_dir = "./webapp/templates";function smarty_block_dynamic($param,$content,&$views){return $content;} $views->register_block('dynamic','smarty_block_dynamic',false);

在這裡,我們用ZF的對象註冊表(Registry)來對$view來進行存貯,這樣,在程式的任何對方,我們都可以調用它來進行操作。Zend_Registry::set('views', $views);設定好了以後,運行程式。$frontController->dispatch();

這個時候,你如果運行http://127.0.0.1/test 來進行測試。會發現有個錯誤類似 Fatal error: Uncaught exception 'Zend_Controller_Dispatcher_Exception' with message 'Invalid controller specified (index)' in…這個是因為我們還沒有設定好我們程式。

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:

<?php class IndexController extends Zend_Controller_Action { function init(){} function indexAction() { } function addAction() { } } ?>

我們現在有三個我們想使用的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,中文意思就是可延伸標記語言 (XML),標記語言就是那種用角括弧(<>)括來括去的那種語言,比如說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:

<?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)));?>

OK,現在開啟http;//127.0.0.1/test/看看。剛才建立的那個XMLRPC應該已經建立起來了,輸入數字,測試一下吧!

更多關於zend相關內容感興趣的讀者可查看本站專題:《Zend FrameWork架構入門教程》、《php優秀開發架構總結》、《Yii架構入門及常用技巧總結》、《ThinkPHP入門教程》、《php物件導向程式設計入門教程》、《php+mysql資料庫操作入門教程》及《php常見資料庫操作技巧匯總》

希望本文所述對大家基於zend framework架構的PHP程式設計有所協助。

您可能感興趣的文章:

  • 非常好用的Zend Framework分頁類
  • Zend Framework自訂Helper類相關注意事項總結
  • Zend Framework教程之Bootstrap類用法概述
  • Zend Framework教程之動作的基類Zend_Controller_Action詳解
  • 解析zend Framework如何自動載入類
  • Zend Framework產生驗證碼並實現驗證碼驗證功能(附demo源碼下載)
  • Zend Framework架構之Zend_Mail實現發送Email郵件驗證功能及解決標題亂碼的方法
  • Zend Framework教程之Zend_Form組件實現表單提交並顯示錯誤提示的方法
  • Zend Framework實現多檔案上傳功能執行個體
  • Zend Framework入門之環境配置及第一個Hello World樣本(附demo源碼下載)
  • Zend Framework入門知識點小結
  • Zend Framework基本頁面布局分析
  • Zend Framework分頁類用法詳解

http://www.bkjia.com/PHPjc/1111890.htmlwww.bkjia.comtruehttp://www.bkjia.com/PHPjc/1111890.htmlTechArticleZend Framework+smarty用法執行個體詳解,zendsmarty 本文執行個體講述了Zend Framework+smarty用法。分享給大家供大家參考,具體如下: 一、Zend Framework簡介...

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.