Zend Framework教程之视图组件Zend_View用法详解,zendzend_view
Zend Framework教程之视图组件Zend_View用法详解,zendzend_view
本文实例讲述了Zend Framework教程之视图组件Zend_View用法。分享给大家供大家参考,具体如下:
Zend_View是Zend Framework的视图组件,MVC中的视图层。 Zend_View也是应用的直接对用户展示的页面。这里介绍一下Zend_View的实现类,以及如何和Controller结合在一起的。
View的实现
Zend_View的实现主要是通过如下目录的类实现:
root@coder-671T-M:/library/Zend# tree | grep View.php
│ └── View/
├── View.php
root@coder-671T-M:/library/Zend/View# tree
.
├── Abstract.php
├── Exception.php
├── Helper
│ ├── Abstract.php
│ ├── Action.php
│ ├── BaseUrl.php
│ ├── Currency.php
│ ├── Cycle.php
│ ├── DeclareVars.php
│ ├── Doctype.php
│ ├── Fieldset.php
│ ├── FormButton.php
│ ├── FormCheckbox.php
│ ├── FormElement.php
│ ├── FormErrors.php
│ ├── FormFile.php
│ ├── FormHidden.php
│ ├── FormImage.php
│ ├── FormLabel.php
│ ├── FormMultiCheckbox.php
│ ├── FormNote.php
│ ├── FormPassword.php
│ ├── Form.php
│ ├── FormRadio.php
│ ├── FormReset.php
│ ├── FormSelect.php
│ ├── FormSubmit.php
│ ├── FormTextarea.php
│ ├── FormText.php
│ ├── Gravatar.php
│ ├── HeadLink.php
│ ├── HeadMeta.php
│ ├── HeadScript.php
│ ├── HeadStyle.php
│ ├── HeadTitle.php
│ ├── HtmlElement.php
│ ├── HtmlFlash.php
│ ├── HtmlList.php
│ ├── HtmlObject.php
│ ├── HtmlPage.php
│ ├── HtmlQuicktime.php
│ ├── InlineScript.php
│ ├── Interface.php
│ ├── Json.php
│ ├── Layout.php
│ ├── Navigation
│ │ ├── Breadcrumbs.php
│ │ ├── HelperAbstract.php
│ │ ├── Helper.php
│ │ ├── Links.php
│ │ ├── Menu.php
│ │ └── Sitemap.php
│ ├── Navigation.php
│ ├── PaginationControl.php
│ ├── Partial
│ │ └── Exception.php
│ ├── PartialLoop.php
│ ├── Partial.php
│ ├── Placeholder
│ │ ├── Container
│ │ │ ├── Abstract.php
│ │ │ ├── Exception.php
│ │ │ └── Standalone.php
│ │ ├── Container.php
│ │ ├── Registry
│ │ │ └── Exception.php
│ │ └── Registry.php
│ ├── Placeholder.php
│ ├── RenderToPlaceholder.php
│ ├── ServerUrl.php
│ ├── TinySrc.php
│ ├── Translate.php
│ ├── Url.php
│ └── UserAgent.php
├── Interface.php
└── Stream.php
6 directories, 70 files
Zend_View和Zend_Controller的整合
主要在Zend_Controller_Action类中,
/** * Initialize View object * * Initializes {@link $view} if not otherwise a Zend_View_Interface. * * If {@link $view} is not otherwise set, instantiates a new Zend_View * object, using the 'views' subdirectory at the same level as the * controller directory for the current module as the base directory. * It uses this to set the following: * - script path = views/scripts/ * - helper path = views/helpers/ * - filter path = views/filters/ * * @return Zend_View_Interface * @throws Zend_Controller_Exception if base view directory does not exist */ public function initView() { if (!$this->getInvokeArg('noViewRenderer') && $this->_helper->hasHelper('viewRenderer')) { return $this->view; } require_once 'Zend/View/Interface.php'; if (isset($this->view) && ($this->view instanceof Zend_View_Interface)) { return $this->view; } $request = $this->getRequest(); $module = $request->getModuleName(); $dirs = $this->getFrontController()->getControllerDirectory(); if (empty($module) || !isset($dirs[$module])) { $module = $this->getFrontController()->getDispatcher()->getDefaultModule(); } $baseDir = dirname($dirs[$module]) . DIRECTORY_SEPARATOR . 'views'; if (!file_exists($baseDir) || !is_dir($baseDir)) { require_once 'Zend/Controller/Exception.php'; throw new Zend_Controller_Exception('Missing base view directory ("' . $baseDir . '")'); } require_once 'Zend/View.php'; $this->view = new Zend_View(array('basePath' => $baseDir)); return $this->view; } /** * Render a view * * Renders a view. By default, views are found in the view script path as * <controller>/<action>.phtml. You may change the script suffix by * resetting {@link $viewSuffix}. You may omit the controller directory * prefix by specifying boolean true for $noController. * * By default, the rendered contents are appended to the response. You may * specify the named body content segment to set by specifying a $name. * * @see Zend_Controller_Response_Abstract::appendBody() * @param string|null $action Defaults to action registered in request object * @param string|null $name Response object named path segment to use; defaults to null * @param bool $noController Defaults to false; i.e. use controller name as subdir in which to search for view script * @return void */ public function render($action = null, $name = null, $noController = false) { if (!$this->getInvokeArg('noViewRenderer') && $this->_helper->hasHelper('viewRenderer')) { return $this->_helper->viewRenderer->render($action, $name, $noController); } $view = $this->initView(); $script = $this->getViewScript($action, $noController); $this->getResponse()->appendBody( $view->render($script), $name ); } /** * Render a given view script * * Similar to {@link render()}, this method renders a view script. Unlike render(), * however, it does not autodetermine the view script via {@link getViewScript()}, * but instead renders the script passed to it. Use this if you know the * exact view script name and path you wish to use, or if using paths that do not * conform to the spec defined with getViewScript(). * * By default, the rendered contents are appended to the response. You may * specify the named body content segment to set by specifying a $name. * * @param string $script * @param string $name * @return void */ public function renderScript($script, $name = null) { if (!$this->getInvokeArg('noViewRenderer') && $this->_helper->hasHelper('viewRenderer')) { return $this->_helper->viewRenderer->renderScript($script, $name); } $view = $this->initView(); $this->getResponse()->appendBody( $view->render($script), $name ); }
Zend_View.php类
<?php /** * Zend Framework * * LICENSE * * This source file is subject to the new BSD license that is bundled * with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://framework.zend.com/license/new-bsd * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@zend.com so we can send you a copy immediately. * * @category Zend * @package Zend_View * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License * @version $Id: View.php 23775 2011-03-01 17:25:24Z ralph $ */ /** * Abstract master class for extension. */ require_once 'Zend/View/Abstract.php'; /** * Concrete class for handling view scripts. * * @category Zend * @package Zend_View * @copyright Copyright (c) 2005-2011 Zend Technologies USA Inc. (http://www.zend.com) * @license http://framework.zend.com/license/new-bsd New BSD License */ class Zend_View extends Zend_View_Abstract { /** * Whether or not to use streams to mimic short tags * @var bool */ private $_useViewStream = false; /** * Whether or not to use stream wrapper if short_open_tag is false * @var bool */ private $_useStreamWrapper = false; /** * Constructor * * Register Zend_View_Stream stream wrapper if short tags are disabled. * * @param array $config * @return void */ public function __construct($config = array()) { $this->_useViewStream = (bool) ini_get('short_open_tag') ? false : true; if ($this->_useViewStream) { if (!in_array('zend.view', stream_get_wrappers())) { require_once 'Zend/View/Stream.php'; stream_wrapper_register('zend.view', 'Zend_View_Stream'); } } if (array_key_exists('useStreamWrapper', $config)) { $this->setUseStreamWrapper($config['useStreamWrapper']); } parent::__construct($config); } /** * Set flag indicating if stream wrapper should be used if short_open_tag is off * * @param bool $flag * @return Zend_View */ public function setUseStreamWrapper($flag) { $this->_useStreamWrapper = (bool) $flag; return $this; } /** * Should the stream wrapper be used if short_open_tag is off? * * @return bool */ public function useStreamWrapper() { return $this->_useStreamWrapper; } /** * Includes the view script in a scope with only public $this variables. * * @param string The view script to execute. */ protected function _run() { if ($this->_useViewStream && $this->useStreamWrapper()) { include 'zend.view://' . func_get_arg(0); } else { include func_get_arg(0); } } }
默认情况会自动通过Controller会通过render方法来实例化Zend_View, 然后rener到对应的视图文件中。当然可以自己实例化Zend_View,然后使用。
action默认指向的文件是和action的名称相同,如果要指定视图文件,可以通过$this->render的相关方法指定.也可以通过addScriptPath和setScriptPath设置视图文件的目录。
例如
$view = new Zend_View(); $view->addScriptPath('/www/app/myviews'); $view->addScriptPath('/www/app/viewscomm'); // 如果调用 $view->render('example.php'), Zend_View 将 // 首先查找 "/www/app/myviews/example.php", 找不到再找"/www/app/viewscomm/example.php", 如果还找不到,最后查找当前目录下/的"example.php".
Zend_View的常用方法
public function __construct($config = array())
构造函数参数
例如
array( 'escape' => array(), 'encoding' => array(), );
常见key:
escape、encoding、basePath、basePathPrefix、scriptPath、helperPath、 helperPathPrefix、filterPath、filterPathPrefix、filter
public function getEngine() Return the template engine object
public function init()初始化函数
/** * Given a base path, sets the script, helper, and filter paths relative to it * * Assumes a directory structure of: * <code> * basePath/ * scripts/ * helpers/ * filters/ * </code> * * @param string $path * @param string $prefix Prefix to use for helper and filter paths * @return Zend_View_Abstract */ public function setBasePath($path, $classPrefix = 'Zend_View') /** * Given a base path, add script, helper, and filter paths relative to it * * Assumes a directory structure of: * <code> * basePath/ * scripts/ * helpers/ * filters/ * </code> * * @param string $path * @param string $prefix Prefix to use for helper and filter paths * @return Zend_View_Abstract */ public function addBasePath($path, $classPrefix = 'Zend_View') public function addScriptPath($path)Adds to the stack of view script paths in LIFO order. public function setScriptPath($path) Resets the stack of view script paths. public function getScriptPath($name)Return full path to a view script specified by $name public function getScriptPaths()Returns an array of all currently set script paths public function addHelperPath($path, $classPrefix = 'Zend_View_Helper_')Adds to the stack of helper paths in LIFO order. public function setHelperPath($path, $classPrefix = 'Zend_View_Helper_')Resets the stack of helper paths. public function getHelperPath($name) Get full path to a helper class file specified by $name public function getHelperPaths()Returns an array of all currently set helper paths public function getHelper($name) Get a helper by name public function getHelpers()Get array of all active helpers public function getAllPaths() Return associative array of path types => paths public function setEscape($spec) /** * Assigns variables to the view script via differing strategies. * * Zend_View::assign('name', $value) assigns a variable called 'name' * with the corresponding $value. * * Zend_View::assign($array) assigns the array keys as variable * names (with the corresponding array values). * * @see __set() * @param string|array The assignment strategy to use. * @param mixed (Optional) If assigning a named variable, use this * as the value. * @return Zend_View_Abstract Fluent interface * @throws Zend_View_Exception if $spec is neither a string nor an array, * or if an attempt to set a private or protected member is detected */ public function assign($spec, $value = null)
在controller的action可以通过assign传递参数到视图脚本。
例如
$this->view->assign('roles', $roles); $this->view->assign('num', $num); $this->view->assign('a', $a);
或者也可以用
$this->view->roles=$roles; $this->view->a=$a; public function render($name) Processes a view script and returns the output. public function escape($var):Escapes a value for output in a view script. public function setEncoding($encoding) Set encoding to use with htmlentities() and htmlspecialchars() public function getEncoding() :Return current escape encoding
视图脚本文件中的常见用法:
获取传递过来的值
$this->roles
使用一些常见的助手方法:
$this->baseUrl(); $this->url(); $this->paginationControl(); $this->partial()
视图常见用法举例
在bootstrap初始化view或者controller的init文件中
/** * Initialize the common view helper */ protected function _initViewHelper() { $boot=$this->bootstrap('View'); $view = $boot->getResource('View'); $view->setHelperPath('Sql/View/Helper', 'Sql_View_Helper'); }
action中
/** * * @return void */ public function listAction() { $this->view->assign('data', $data); }
视图文件
list.phtml
<?php foreach ($this->data as $item) : ?> <tr style="height: 19px;"> <td class="datagrid-cell"><?php echo($item->item1);?></td> </tr> <?php endforeach; ?>
更多关于zend相关内容感兴趣的读者可查看本站专题:《Zend FrameWork框架入门教程》、《php优秀开发框架总结》、《Yii框架入门及常用技巧总结》、《ThinkPHP入门教程》、《php面向对象程序设计入门教程》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
您可能感兴趣的文章:
- Zend Framework教程之Autoloading用法详解
- Zend Framework教程之Resource Autoloading用法实例
- Zend Framework教程之MVC框架的Controller用法分析
- Zend Framework教程之路由功能Zend_Controller_Router详解
- Zend Framework教程之Zend_Controller_Plugin插件用法详解
- Zend Framework教程之响应对象的封装Zend_Controller_Response实例详解
- Zend Framework教程之请求对象的封装Zend_Controller_Request实例详解
- Zend Framework教程之动作的基类Zend_Controller_Action详解
- Zend Framework教程之分发器Zend_Controller_Dispatcher用法详解
- Zend Framework教程之前端控制器Zend_Controller_Front用法详解
- Zend Framework教程之Loader以及PluginLoader用法详解

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

.NET Framework 4 diperlukan oleh pembangun dan pengguna akhir untuk menjalankan versi terkini aplikasi pada Windows. Walau bagaimanapun, semasa memuat turun dan memasang .NET Framework 4, ramai pengguna mengadu bahawa pemasang berhenti di tengah jalan, memaparkan mesej ralat berikut - " .NET Framework 4 belum dipasang kerana Muat turun gagal dengan kod ralat 0x800c0006 ". Jika anda juga mengalaminya semasa memasang .NETFramework4 pada peranti anda maka anda berada di tempat yang betul

Jadual adalah komponen penting dalam banyak aplikasi web. Jadual biasanya mempunyai jumlah data yang besar, jadi jadual memerlukan beberapa ciri khusus untuk meningkatkan pengalaman pengguna. Salah satu ciri penting ialah keboleheditan. Dalam artikel ini, kami akan meneroka cara melaksanakan jadual boleh diedit menggunakan Vue.js dan memberikan contoh kod khusus. Langkah 1: Sediakan data Mula-mula, kita perlu menyediakan data untuk jadual. Kita boleh menggunakan objek JSON untuk menyimpan data jadual dan menyimpannya dalam sifat data bagi contoh Vue. Dalam kes ini

Dalam iOS 17 Apple memperkenalkan Mod Siap Sedia, pengalaman paparan baharu yang direka untuk mengecas iPhone dalam orientasi mendatar. Dalam kedudukan ini, iPhone dapat memaparkan satu siri widget skrin penuh, mengubahnya menjadi hab rumah yang berguna. Mod siap sedia diaktifkan secara automatik pada iPhone yang menjalankan iOS 17 yang diletakkan secara mendatar pada pengecas. Anda boleh melihat maklumat seperti masa, cuaca, kalendar, kawalan muzik, foto dan banyak lagi. Anda boleh leret ke kiri atau kanan melalui pilihan siap sedia yang tersedia dan kemudian tekan lama atau leret ke atas/bawah untuk menyesuaikan. Sebagai contoh, anda boleh memilih daripada paparan analog, paparan digital, fon gelembung dan paparan siang, di mana warna latar belakang berubah berdasarkan masa seiring dengan berlalunya masa. Terdapat beberapa pilihan

Setiap kali PC Windows 11 atau Windows 10 anda mempunyai masalah naik taraf atau kemas kini, anda biasanya akan melihat kod ralat yang menunjukkan sebab sebenar di sebalik kegagalan. Walau bagaimanapun, kadangkala kekeliruan boleh timbul apabila peningkatan atau kemas kini gagal tanpa kod ralat dipaparkan. Dengan kod ralat yang berguna, anda tahu dengan tepat di mana masalahnya supaya anda boleh cuba membetulkannya. Tetapi kerana tiada kod ralat muncul, ia menjadi mencabar untuk mengenal pasti isu dan menyelesaikannya. Ini akan mengambil banyak masa anda untuk mengetahui sebab di sebalik ralat. Dalam kes ini, anda boleh cuba menggunakan alat khusus yang dipanggil SetupDiag yang disediakan oleh Microsoft yang membantu anda mengenal pasti dengan mudah sebab sebenar di sebalik ralat.
![SCNotification telah berhenti berfungsi [5 langkah untuk membetulkannya]](https://img.php.cn/upload/article/000/887/227/168433050522031.png?x-oss-process=image/resize,m_fill,h_207,w_330)
Sebagai pengguna Windows, anda mungkin akan menghadapi ralat SCNotification telah berhenti berfungsi setiap kali anda memulakan komputer anda. SCNotification.exe ialah fail pemberitahuan sistem Microsoft yang ranap setiap kali anda memulakan PC anda kerana ralat kebenaran dan kegagalan rangkaian. Ralat ini juga dikenali dengan nama acaranya yang bermasalah. Jadi anda mungkin tidak melihat ini sebagai SCNotification telah berhenti berfungsi, tetapi sebagai pepijat clr20r3. Dalam artikel ini, kami akan meneroka semua langkah yang anda perlu ambil untuk membetulkan SNotification telah berhenti berfungsi supaya ia tidak mengganggu anda lagi. Apakah itu SNotification.e

Bandingkan SpringBoot dan SpringMVC dan fahami perbezaannya Dengan pembangunan Java yang berterusan, rangka kerja Spring telah menjadi pilihan pertama bagi banyak pembangun dan perusahaan. Dalam ekosistem Spring, SpringBoot dan SpringMVC ialah dua komponen yang sangat penting. Walaupun kedua-duanya adalah berdasarkan rangka kerja Spring, terdapat beberapa perbezaan dalam fungsi dan penggunaan. Artikel ini akan menumpukan pada membandingkan SpringBoot dan Spring

Laravel ialah salah satu rangka kerja PHP yang paling popular pada masa ini, dan keupayaan penjanaan paparan yang berkuasa sangat mengagumkan. Paparan ialah halaman atau elemen visual yang dipaparkan kepada pengguna dalam aplikasi web, yang mengandungi kod seperti HTML, CSS dan JavaScript. LaravelView membenarkan pembangun menggunakan bahasa templat berstruktur untuk membina halaman web dan menjana paparan yang sepadan melalui pengawal dan penghalaan. Dalam artikel ini, kami akan meneroka cara menjana paparan menggunakan LaravelView. 1. Apa

Pengguna Microsoft Windows yang telah memasang Microsoft.NET versi 4.5.2, 4.6 atau 4.6.1 mesti memasang versi Microsoft Framework yang lebih baharu jika mereka mahu Microsoft menyokong rangka kerja melalui kemas kini produk masa hadapan. Menurut Microsoft, ketiga-tiga rangka kerja akan menghentikan sokongan pada 26 April 2022. Selepas tarikh sokongan tamat, produk tidak akan menerima "pembetulan keselamatan atau sokongan teknikal." Kebanyakan peranti rumah sentiasa dikemas kini melalui kemas kini Windows. Peranti ini sudah mempunyai versi rangka kerja yang lebih baharu yang dipasang, seperti .NET Framework 4.8. Peranti yang tidak mengemas kini secara automatik boleh
