12 Haziran 2014

Zend’de view render ederken değişkenleriniz değişmiyorsa!

ile hasan

Bu gece de uzun bir debug sürecinden sonra uyuz bir durumun çözümüne ulaştık. Unutmadan hemen kendime not düşeyim, ayrıca yarın bir gün saftorik bir eleman ‘abi bu nasıldı?’ derse ‘Blogumda var, yoksa okumadın mı ha!!!!’ diye yalandan celallenebileyim 🙂 Bu gençler olmasa biz neyle eğleneceğiz yahu..

Zend’de bir action’da siz başka bir şey zorlamadığınız müddetçe o action’ın adında bir view dosyası render etmeye çalışır sistem.. Mesela TestController’ında denemeAction()’ını varsa bu action çalıştırıldığında views/scripts/test klasörü altında deneme.phtml’i bulunur, render edilir ve layout dosyanız ne ise onun içine render edilmiş hali oturur.

Controller’da view katmanına $this->view şeklinde erişilir. View’a bir değişken gönderilmek istendiğinde action içerisinde örneğin $this->view->baslik=’Sayfa Başlığı’ denir.. Zend’de her action fonksiyonundan önce ve sonra çalışan prepatch() ve postpatch() şeklinde iki fonksiyon vardır. Buralar vasıtasıyla çeşitli ilk ve son müdahalelerinizi her action tek bir yerden yapabilirsiniz. Bu fonksiyonlar da controllera ait olduğu için view’a müdahale ederken yine $this->view şeklinde kullanılır.

Bizi çileden çıkaran ne idi?

Şöyle ki; yukarıda belirttiğim üzere eğer siz başka bir şey belirtmezseniz action kendi adıyla aynı olan view’i bulup render eder. Burda sıkıntı yok. Değişkenler de cuk diye yerine oturur. Fakat, siz bir action içerisinde duruma göre başka bir view dosyasını render etmek isterseniz $this->render(“digerdosya”) şeklinde belirtmeniz icab ediyor. Eğer bu digerdosya.phtml action’un kendi view’i ile aynı klasörde ise böyle demeniz kafi. Farklı klasördeyse klasörü ve dosyanın tam adını $this->render(“klasor/digerdosya.phtml”) şeklinde belirtmelisiniz..

Biz $this->render(“digerdosya”) seçeneğini kullanıyorduk.

Sorun da buradaymış.. Bu şekilde render edildiğinde action’dan sonra mesela postpatch() fonksiyonu içerisinde view’a erişip değişkenleri ne kadar değiştirirsek değiştirelim sanki hiç oynamamışız gibi view’a yansıyormuş.. View değişkenlerinde action’dan sonra yapılan değişikliklerin render işlemine katılabilmesi için şu şekilde kullanmak icab ediyormuş..

$this->_helper->viewRenderer("digerdosya");

İnşallah bu yazı benim kaybettiğim bir saati size kazandırmış olur..