Zend Framework - Katmanı Görüntüle
Görünüm Katmanı, MVC uygulamasının sunum katmanıdır. Uygulama mantığını sunum mantığından ayırır. Tipik bir PHP web uygulamasında, tüm iş mantığı ve tasarımı birbirine karıştırılmıştır. Intermixing, küçük bir projede daha hızlı geliştirme sağlar. Ancak, birçok üst düzey mimarinin dahil olduğu büyük projelerde sefil bir şekilde başarısız oluyor. Web uygulamasının tasarımını değiştirmek için bir geliştiricinin iş mantığı üzerinde de çalışması gerekir. Bu, iş mantığının bozulmasına neden olacak şekilde felaket olabilir.
Zend Framework, iyi düşünülmüş, temiz, esnek ve genişletilebilir bir Görünüm katmanı sağlar. Görünüm katmanı ayrı bir modül olarak mevcuttur,Zend/View ve iyi entegre Zend/Mvcmodül. Zend Görünüm Katmanı, birbiriyle güzel bir şekilde etkileşime giren birden çok bileşene ayrılmıştır.
Çeşitli bileşenleri aşağıdaki gibidir -
Variables Containers - Görünüm katmanı verilerini tutar.
View Models - Değişken Kapları ve tasarım şablonunu tutar.
Renderers - View Model'den verileri ve şablonu işleyin ve bir tasarım temsili, belki de son html çıktısını çıkarın.
Resolvers - Görünüm Modelinde bulunan şablonu, İşleyicinin kullanabileceği şekilde çözümler.
View (Zend\View\View) - İşleyiciye ve ardından işleyiciye yanıt verir.
Rendering Strategies - Oluşturucuya yönelik harita isteği için View tarafından kullanılır.
Response Strategies - Görüntü oluşturucuyu yanıta eşlemek için Görünüm tarafından kullanılır.
Görünüm katmanı, View işler ViewModel, şablonu bir kullanarak çözer Resolver, kullanarak oluştur Rendering Strategy ve son olarak bunu kullanarak çıktılar Response Renderer.
Katman Yapılandırmasını Görüntüle
Denetleyici gibi, bir Görünüm katmanı, bir modülün - olarak adlandırılan yapılandırma dosyasında yapılandırılabilir. module.config.php. Ana yapılandırma, şablonların nereye yerleştirileceğini belirlemektir. Bu, “module.config.php” içine aşağıdaki konfigürasyonu ekleyerek gerçekleştirilebilir.
'view_manager' => [
'template_path_stack' => ['tutorial' => __DIR__ . '/../view',],
]
Varsayılan olarak, Görünüm katmanının tüm bileşenleri için varsayılan bir davranışı vardır. Örneğin, birViewModel"küçük harf-modül-adı / küçük harf-denetleyici-adı / küçük harf-eylem-adı" kuralı ile şablon kökü içindeki bir denetleyicinin eyleminin şablon adını çözer. Ancak bu, tarafından geçersiz kılınabilirsetTemplate() ViewModel yöntemi.
Denetleyiciler ve Görünüm Katmanı
Varsayılan olarak, bir denetleyicinin görünüm katmanına herhangi bir veri göndermesine gerek yoktur. Şablonu uygun yere yazmanız yeterlidir.
Örneğin, bizim örneğimizde, TutorialControllerşablonun şuraya yerleştirilmesi gerekir: myapp/module/Tutorial/view/tutorial/tutorial/index.phtml. index.phtmlPHP tabanlı şablonu ifade eder ve PHPRenderer tarafından işlenecektir. Gibi başka oluşturucular da varJsonRenderer için json çıktı ve FeedRenderer için rss ve atom çıktı.
Tam liste aşağıdaki gibidir -
<?php
namespace Tutorial\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
class TutorialController extends AbstractActionController {
public function indexAction() {
}
}
Zend Uygulama Şablonu
<div class = "row content">
<h3>This is my first Zend application</h3>
</div>
Son olarak, başarıyla tamamladık Tutorial modül ve url kullanarak erişebiliriz - http://localhost:8080/tutorial.
Görünüm Katmanına Veri Aktarma
Verileri bir görünüm katmanına göndermenin en basit yolu, ViewModelargümanlar. DeğiştiindexAction yöntem aşağıdaki gibidir -
public function indexAction() {
$view = new ViewModel([ 'message' => 'Hello, Tutorial' ]); return $view;
}
Şimdi değiştir index.phtml aşağıdaki gibi dosya -
<div class = "row content">
<h3>This is my first Zend application</h3>
<h4><?php echo $this->message?></h4>
</div>
Yardımcıları Görüntüle
Görünüm Yardımcısı, şablonlarda kullanılacak küçük, atomik işlevleri yazmak için kullanılır. Zend çerçevesi, standart görünüm yardımcıları yazmak için bir arayüz, Zend \ View \ Helper \ HelperInterface sağlar.
Bir HelperInterface'in yalnızca iki yöntemi vardır,
setView() - Bu yöntem bir Zend \ View \ Renderer \ RendererInterface örneğini / uygulamasını kabul eder.
getView() - Bu örneği almak için kullanılır.
Tam kod listesi HelperInterface aşağıdaki gibidir -
namespace Zend\View\Helper;
use Zend\View\Renderer\RendererInterface as Renderer;
interface HelperInterface {
/**
* Set the View object
*
* @param Renderer $view
* @return HelperInterface
*/
public function setView(Renderer $view);
/**
* Get the View object
*
* @return Renderer
*/
public function getView();
}
Görünüm komut dosyanızda bir yardımcı kullanmak için, $this->helperName().
Yerleşik Yardımcıları
Zend Framework, çeşitli amaçlar için birçok dahili yardımcı işlev sağlar. Görüntülemeye Yardımcı Olanlardan bazılarızend-mvc aşağıdaki gibidir -
URL
URL yardımcısı, uygulamada tanımlanan yollarla eşleşen URL'leri oluşturmak için kullanılır.
URL yardımcısının tanımı -
$this->url($name, $params, $options, $reuseMatchedParameters)
Örneğin, eğitim modülünde rota şu şekilde adlandırılır: tutorial ve iki parametresi var action ve id. Aşağıda gösterildiği gibi iki farklı URL oluşturmak için URL yardımcısını kullanabiliriz -
<a href = "<? = $this->url('tutorial'); ?>">Tutorial Index</a>
<a href = "<? = $this->url('tutorial', ['action' => 'show', 'id' =>10]); ?>">
Details of Tutorial #10
</a>
Sonuç aşağıdaki gibi olacaktır -
<a href = "/tutorial">Tutorial Index</a>
<a href = "/tutorial/show/10"> Details of Tutorial #10</a>
Yer tutucu
Yer tutucu yardımcısı, içeriği görüntüleme komut dosyaları ve görüntüleme örnekleri arasında kalıcı hale getirmek için kullanılır. Verileri başlangıçta ayarlama ve daha sonraki aşamalarda kullanma seçeneği sunar.
Örneğin, diyebiliriz company name ve sonra diğer tüm yerlerde kullanın.
<?php $this->placeholder('companyname')->set("TutorialsPoint") ?>
<?= $this->placeholder('companyname'); ?>
Yer tutucu, PHP dizisi ve nesnelerinden karmaşık içerik oluşturmak için bazı gelişmiş seçenekler sağlar. Ayrıca şablonun belirli bir bölümünü yakalama seçeneğine de sahiptir.
Örneğin, aşağıdaki kod aradaki şablon sonucunu yakalar ve bunu productlist Yer tutucu.
Class – Product
class Product {
public $name;
public $description;
}
Controller
$p1 = new Product();
$p1->name = 'Car'; $p1->description = 'Car';
$p2 = new Product(); $p2->name = 'Cycle';
$p2->description = 'Cycle'; $view = new ViewModel(['products' => $products]);
Template
<!-- start capture -->
<?php $this->placeholder('productlist')->captureStart();
foreach ($this->products as $product): ?>
<div>
<h2><?= $product->name ?></h2> <p><?= $product->description ?></p>
</div>
<?php endforeach; ?>
<?php $this->placeholder('productlist')->captureEnd() ?> <!-- end capture --> <?= $this->placeholder('productlist') ?>
Result
<div class = "foo">
<h2>Car</h2>
<p>Car</p>
</div>
<div class = "foo">
<h2>Cycle</h2>
<p>Cycle</p>
</div>
Doküman türü
Doctype yardımcısı çeşitli html dokümanları oluşturmak için kullanılır. Somut bir uygulamasıdır.Placeholderyardımcı. Doctype, bir önyükleme dosyasında ve yapılandırma dosyasında ayarlanabilir.
Temel kullanım aşağıda gösterilmiştir -
Application Bootstrap file
use Zend\View\Helper\Doctype;
$doctypeHelper = new Doctype(); $doctypeHelper->doctype('XHTML5');
Module Configuration
// module/Application/config/module.config.php:
return [
/* ... */
'view_manager' => [
'doctype' => 'html5',
/* ... */
],
];
Template
<?php echo $this->doctype() ?>
HeadTitle
HeadTitle yardımcısı, html başlık öğesini oluşturmak için kullanılır. Somut uygulamasıdırPlaceholderyardımcı. Zend, modül yapılandırma dosyasında başlığı ayarlamak için bir seçenek sunar ve site, modül, kontrolör, eylem vb. Gibi herhangi bir seviyede ayarlanabilir. HeadTitle için kısmi bir kod aşağıdaki gibidir -
Module
headTitleHelper->append($action);
$headTitleHelper->append($controller);
$headTitleHelper->append($module);
$headTitleHelper->append($siteName);
Template
<?= $this->headTitle() ?>
Result
action - controller - module - Zend Framework
HeadMeta
HeadMeta yardımcısı, html meta etiketleri oluşturmak için kullanılır. Yer tutucu yardımcısının somut bir uygulamasıdır.
Template -
<?php
$this->headMeta()->appendName('keywords', 'turorialspoint, zend framework, php');
echo $this->headMeta()
?>
Result
<meta name = "keywords" content = "tutorialspoint, zend framework, php" />
HeadLink
HeadLink yardımcısı, harici kaynakları içerecek html bağlantıları oluşturmak için kullanılır. Yer tutucu yardımcısının somut uygulamasıdır.
Template
<?php
// setting links in a view script:
$this->headLink(['rel' => 'icon', 'href' => '/img/favicon.ico'], 'PREPEND')
->appendStylesheet('/styles/site.css')
->prependStylesheet('/styles/mystyle.css', 'screen', true, ['id' => 'mystyle']);
// rendering the links from the layout:
echo $this->headLink();
?>
Result
<link href = "/styles/mystyle.css" media = "screen" rel = "stylesheet"
type = "text/css" id = "mystyle">
<link href = "/img/favicon.ico" rel = "icon">
<link href = "/styles/site.css" media = "screen" rel = "stylesheet" type = "text/css">
HeadStyle
HeadStyle yardımcısı, satır içi CSS stilleri oluşturmak için kullanılır. Yer tutucu yardımcısının somut uygulamasıdır.
Template
<?php $this->headStyle()->appendStyle($styles); ?> <?php echo $this->headStyle() ?>
HeadScript
HeadScript, satır içi komut dosyası oluşturmak veya harici komut dosyalarını dahil etmek için kullanılır. Yer tutucu yardımcısının somut uygulamasıdır.
Template
<? $this->headScript()->appendFile(‘/js/sample.js’);?> <?php echo $this->headScript() ?>
InlineScript
InlineScript, html şablonunun hem head hem de body bölümünde bir komut dosyası oluşturmak için kullanılır. HeadScript'ten türetilmiştir.
HTMLList
HTMLList, sıralı ve sırasız liste oluşturmak için kullanılır. HTMLList'in tanımı aşağıdaki gibidir -
Definition
htmlList($items, $ordered, $attribs, $escape)
Template
$items = [ '2015', ['March', 'November'], '2016', ]; echo $this->htmlList($items);
Result
<ul>
<li>2015
<ul>
<li>March</li>
<li>November</li>
</ul>
</li>
<li>2016</li>
</ul>
Döngü
Döngü ortamında alternatifler oluşturmak için Döngü kullanılır. Atama, sonraki ve önceki işlevi vardır.
Controller
$view = new ViewModel(['message' => 'Hello, Tutorial', 'data' => array('One', 'Two')]);
Template
<?php $this->cycle()->assign(['#F0F0F0', '#FFF'], 'colors'); ?> <table> <?php foreach ($this->data as $datum): ?> <tr style = "background-color: <?= $this->cycle()->setName('colors')>next() ?>">
<td><?= $this->escapeHtml($datum) ?></td>
</tr>
<?php endforeach ?>
</table>
Result
<table>
<tr style = "background-color: #F0F0F0">
<td>One</td>
</tr>
<tr style = "background-color: #FFF">
<td>Two</td>
</tr>
</table>
Diğer birkaç önemli yerleşik yardımcı aşağıdaki gibidir -
BasePath - BasePath, uygulamanın kökünün ortak klasörünün yolunu oluşturmak için kullanılır.
Partial - Kısmi, belirli bir şablonu kendi değişken kapsamında oluşturmak için kullanılır.
PartialLoop - PartialLoop, Partial gibidir, ancak döngü ortamında kullanılır.
Identity - Kimlik, oturum açmış kullanıcının kimliğini Kimlik Doğrulama Hizmetinden almak için kullanılır.
JSON- JSON, çıktının JSON formatında olduğu dinlendirici bir ortamda kullanılır. Uygun HTTP başlığını yayar ve düzen konseptini devre dışı bırakır.
Zend Framework'te hala çok sayıda yardımcı bulunmaktadır. i18n helper, form helpers, pagination helpers, navigation helpers, vb.
Görünüm Yardımcıları Oluşturma
Zend Framework yerleşik bir AbstractHelper uygulama HelperInterface görünüm yardımcıları yazmak için.
Yeni bir yardımcı yazmakla ilgili adımlar aşağıdaki gibidir:
Step 1 - Zend \ View \ Helper \ AbstractHelper sınıfını genişletin.
Step 2 - Geçersiz kıl __invoke() işlevi.
Step 3 - Yapılandırmayı module.config.php file.
Step 4 - Görünüm komut dosyalarında görünüm yardımcısını kullanın.
Şimdi bir oluşturalım TestHelper
Adresinde Yardımcı klasör oluştur myapp/module/Tutorial/src/View directory. YazmakTestHelper Yardımcı dizinin içinde, TestHelper.php.
Tam liste aşağıdaki gibidir -
<?php
namespace Tutorial\View\Helper;
use Zend\View\Helper\AbstractHelper;
class TestHelper extends AbstractHelper {
public function __invoke() {
$output = "I am from test helper"; return htmlspecialchars($output, ENT_QUOTES, 'UTF-8');
}
}
Yapılandırmayı şurada ayarla: module.config.php.
'view_helpers' => [
'aliases' => [
'testHelper' => View\Helper\TestHelper::class,
],
'factories' => [
View\Helper\TestHelper::class => InvokableFactory::class,
],
],
Yeni oluşturulan TestHelper içinde about komut dosyasını görüntüle.
<?= $this->testHelper() ?>