<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Red-Pill Blog &#187; Zend Framework</title>
	<atom:link href="http://blog.red-pill.cz/category/zend-framework/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.red-pill.cz</link>
	<description>Blog o internetu, programování a jiných věcech…</description>
	<lastBuildDate>Thu, 29 Apr 2010 13:20:39 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Zend Screencast &#8211; Zend Tool</title>
		<link>http://blog.red-pill.cz/2009/11/17/zend-screencast-zend-tool/</link>
		<comments>http://blog.red-pill.cz/2009/11/17/zend-screencast-zend-tool/#comments</comments>
		<pubDate>Tue, 17 Nov 2009 22:04:58 +0000</pubDate>
		<dc:creator>tomas.fejfar</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programování]]></category>
		<category><![CDATA[Zend Framework]]></category>
		<category><![CDATA[screencast]]></category>
		<category><![CDATA[zend]]></category>

		<guid isPermaLink="false">http://blog.red-pill.cz/?p=315</guid>
		<description><![CDATA[
<p>S Martinem Hujerem jsme natočili netradiční screencast o Zend_Tool.
Najdete ho na webu českého Zend Framework fóra. Budu rád, když se
podělíte o náměty a připomínky v komentářích.</p>

<p>O tom, že zvuk je dost potichu víme a pracujem na tom. Ale kvuli kvalitě
se v tomhle screencastu nedá dát o moc víc nahlas. Takže příště.</p>

<!-- by Texy2! -->]]></description>
			<content:encoded><![CDATA[
<p>S <a href="http://www.hujer.org">Martinem Hujerem</a> jsme natočili
netradiční screencast o Zend_Tool. Najdete ho na <a
href="http://www.zendframework.cz/navody/zend_tool-instalace-a-pouziti-screencast/">webu
českého Zend Framework fóra</a>. Budu rád, když se podělíte o náměty a
připomínky v komentářích.</p>

<p>O tom, že zvuk je dost potichu víme a pracujem na tom. Ale kvuli kvalitě
se v tomhle screencastu nedá dát o moc víc nahlas. Takže příště.</p>

<!-- by Texy2! -->]]></content:encoded>
			<wfw:commentRss>http://blog.red-pill.cz/2009/11/17/zend-screencast-zend-tool/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Nefunkční partials v ZF po upgradu na 1.7.5</title>
		<link>http://blog.red-pill.cz/2009/02/20/nefunkcni-partials-v-zf-po-upgradu-na-175/</link>
		<comments>http://blog.red-pill.cz/2009/02/20/nefunkcni-partials-v-zf-po-upgradu-na-175/#comments</comments>
		<pubDate>Fri, 20 Feb 2009 13:51:29 +0000</pubDate>
		<dc:creator>tomas.fejfar</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://blog.red-pill.cz/?p=132</guid>
		<description><![CDATA[<p>&#8220;Requested scripts may not include parent directory traversal (&#8221;../&#8221;, &#8220;..\&#8221; notation)&#8221;<br />
Tahle práva mě dnes překvapila při ladění shopu. Používal jsem na jednom serveru spoustu věcí na ZENDu, tak jsem si nechal dát ZF do include_path, abych nemusel pokaždé tahat FTPčkem těch10MB (nemam shell access). A ejhle, oni mi upgradovali na 1.7.5 a co se nestalo [...]</p>
]]></description>
			<content:encoded><![CDATA[<blockquote><p>&#8220;Requested scripts may not include parent directory traversal (&#8221;../&#8221;, &#8220;..\&#8221; notation)&#8221;</p></blockquote>
<p>Tahle práva mě dnes překvapila při ladění shopu. Používal jsem na jednom serveru spoustu věcí na ZENDu, tak jsem si nechal dát ZF do include_path, abych nemusel pokaždé tahat FTPčkem těch10MB (nemam shell access). A ejhle, oni mi upgradovali na 1.7.5 a co se nestalo <img src='http://blog.red-pill.cz/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Tahle chyba nastává, když vkládáte view s cestou např.: &#8220;../partials/muj-partial.phtml&#8221; <img src='http://blog.red-pill.cz/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Řešení naštěstí existuje</p>
<blockquote><p><span style="color: #0000ff;">$view</span>-&gt;<span style="color: #006600;">setLfiProtection</span><span style="color: #66cc66;">(</span><span style="color: #000000; font-weight: bold;">false</span><span style="color: #66cc66;">)</span>;</p></blockquote>
<p>Po chvíli zlobení a nadávání jsem vygooglil tento článek:<br />
<a href="http://weierophinney.net/matthew/archives/206-Zend-Framework-1.7.5-Released-Important-Note-Regarding-Zend_View.html">Zend Framework 1.7.5 Released &#8211; Important Note Regarding Zend_View</a><br />
<a href="http://framework.zend.com/manual/en/zend.view.migration.html">53.6.1. Migrating from versions prior to 1.7.5</a> v manuálu Zend Frameworku</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.red-pill.cz/2009/02/20/nefunkcni-partials-v-zf-po-upgradu-na-175/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Rozšiřování funkčnosti rodičovské třídy pomocí hooks</title>
		<link>http://blog.red-pill.cz/2009/01/18/rozsirovani-funkcnosti-rodicovske-tridy/</link>
		<comments>http://blog.red-pill.cz/2009/01/18/rozsirovani-funkcnosti-rodicovske-tridy/#comments</comments>
		<pubDate>Sun, 18 Jan 2009 14:34:17 +0000</pubDate>
		<dc:creator>tomas.fejfar</dc:creator>
				<category><![CDATA[Internet]]></category>
		<category><![CDATA[Nezařazené]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programování]]></category>
		<category><![CDATA[Třídy]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://blog.red-pill.cz/2009/01/18/rozsirovani-funkcnosti-rodicovske-tridy/</guid>
		<description><![CDATA[
<!-- by Texy2! -->]]></description>
			<content:encoded><![CDATA[
<p>K napsání tohoto příspěvku mě inspirovala práce na jednom projektu
v Zend Frameworku, který je opravdu dobře napsaný z hlediska dědičnosti
atp. Někdo bude mít možná pocit, že tu znovuobjevuji kolo, ale někomu to
třeba pomůže. Pokud vás zajímá co jsou to <strong>hooks</strong>, tak
čtěte dále.</p>
<span id="more-103"></span>
<h2>Problém</h2>

<p>Rodičovský controller má v sobě většinu funkcionality. Takže třeba
pro update stačí načíst data, do proměnné controlleru dát form a zavolat
<em>parent::update()</em>. Všechno šlape jako hodinky do chvíle, než je
potřeba nějak rozšířit funkcionalitu nad možnosti parent controlleru.
Např. přidat nějakou složitou validaci dat, přidat nějaký ruhý form,
atp. V tu chvíli se na první pohled zdá, že jediná šance je zkopírovat
kód parent controlleru a udělat v něm potřebné úpravy. A docela dlouho
sem to takhle (prasecky) dělal.</p>

<h2>Řešení</h2>

<p>Do chvíle, než mě <a href="http://www.martinhujer.cz/">Martin Hujer</a>
upozornil na to, že se na tohle dají hezky použít <strong>hooks</strong>! :)
Ne že bych je neznal už dřív. V ZendFrameworku je používám dnes a denně
např. ve FrontController pluginech (dispatchLoop­Shutdown, preDispatch, …).
Ale vůbec mi nedošlo, že bych je mohl použít.</p>

<h2>Coto, toto?</h2>

<p>Cože to ty hooks jsou? Pro neznalé: Hooks jsou procedury, které nalepíte
někam doprostřed kódu a ve zděděné třídě do nich pak napíšete co
potřebujete, aniž byste museli měnit rodičovskou třídu. Pochopitelné? Moc
ne, že.</p>

<p>Příklad pomůže.</p>

<p><strong>Původní zdrojový kód</strong></p>

<pre class="php"><code><span
class="php-comment">// ParentController
</span><span
class="php-keyword1">function</span> updateAction()
{
  <span
class="php-comment">//nějaký kód co nastavuje třeba form, title, oescapování, atp.
</span>  <span
class="php-var">$this</span>-&gt;view-&gt;headTitle(<span
class="php-quote">'test'</span>);
  <span
class="php-comment">//semhle bych chtěl vložit nějaký svůj kód
</span>  <span
class="php-var">$this</span>-&gt;_model-&gt;update(<span
class="php-var">$this</span>-&gt;_data);
  <span
class="php-comment">//nějaký další kód
</span>}</code></pre>

<p><strong>Zdrojový kód s hooks</strong></p>

<pre class="php"><code><span
class="php-comment">// ParentController
</span><span
class="php-keyword1">function</span> updateAction()
{
  <span
class="php-comment">//nějaký kód co nastavuje třeba form, title, oescapování, atp.
</span>  <span
class="php-var">$this</span>-&gt;view-&gt;headTitle(<span
class="php-quote">'test'</span>);
  <span
class="php-var">$this</span>-&gt;_beforeUpdate();
  <span
class="php-var">$this</span>-&gt;_model-&gt;update(<span
class="php-var">$this</span>-&gt;_data);
  <span
class="php-var">$this</span>-&gt;_afterUpdate();
  <span
class="php-comment">//nějaký další kód
</span>}

<span
class="php-keyword1">protected</span> <span
class="php-keyword1">function</span> _beforeUpdate(){}
<span
class="php-keyword1">protected</span> <span
class="php-keyword1">function</span> _afterUpdate(){}

<span
class="php-comment">//IndexController extends ParentController
</span><span
class="php-keyword1">protected</span> <span
class="php-keyword1">function</span> _beforeUpdate(){
  <span
class="php-comment">//tady si můžu zavolat co potřebuji a provede se to
</span>  <span
class="php-comment">//před updatem DB
</span>  <span
class="php-comment">//např.:
</span>  <span
class="php-var">$this</span>-&gt;_data[<span
class="php-quote">'date'</span>] = <span
class="php-quote">'2009-01-01'</span>;
}</code></pre>

<!-- by Texy2! -->]]></content:encoded>
			<wfw:commentRss>http://blog.red-pill.cz/2009/01/18/rozsirovani-funkcnosti-rodicovske-tridy/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Díl 1: Přihlašování uživatelů</title>
		<link>http://blog.red-pill.cz/2008/10/31/dil-1-prihlasovani-uzivatelu/</link>
		<comments>http://blog.red-pill.cz/2008/10/31/dil-1-prihlasovani-uzivatelu/#comments</comments>
		<pubDate>Fri, 31 Oct 2008 15:35:05 +0000</pubDate>
		<dc:creator>tomas.fejfar</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programování]]></category>
		<category><![CDATA[Třídy]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://blog.red-pill.cz/2008/10/31/dil-1-prihlasovani-uzivatelu/</guid>
		<description><![CDATA[
<!-- by Texy2! -->]]></description>
			<content:encoded><![CDATA[
<p>Již delší dobu jsem se chystal na nějaký větší projekt a dnes jsem se
k tomu konečně dostal a začal. A výsledkem je první díl seriálu
screencastů o Zend Frameworku – tentokrát na téma <strong>Jednoduché
přihlašování uživatelů</strong>.</p>
<object height="354" width="450">
<param name="movie"
value="http://www.stream.cz/object/170557-dil-1-prihlasovani-uzivatelu" />
<param name="allowfullscreen" value="true" />
<param name="wmode" value="transparent" />
<embed src="http://www.stream.cz/object/170557-dil-1-prihlasovani-uzivatelu"
type="application/x-shockwave-flash" wmode="transparent" allowfullscreen="true"
height="354" width="450" /></object>
<p>Kvalita záznamu je poněkud slabší a zvuk je malinko out-of-sync
(zvlášť ke konci), ale to se do příštího dílu změní. Případné
náměty na další témata pište do komentářů.</p>

<p>Potom, co jsem screencast dokončil a překomprimoval jsem si všimnul, že
sem zapoměl zmínit to hlídání init() metody. Takže to zmíním tady:</p>

<pre class="php"><code><span
class="php-keyword1">class</span> IndexController extend My_Controller_Restricted{
    <span
class="php-keyword1">public</span> <span
class="php-keyword1">function</span> init(){
        <span
class="php-var">$foo</span> = <span
class="php-quote">'bar'</span>;
        <span
class="php-comment">/* Tady chceme nějaký náš kód, jenže tím jsme přepsali
         * metodu init() v původním controlleru, takže je třeba jí
         * ještě zavolat.
         * Pokud by se měl init vykonat pouze po přihlášení, tak musí být
         * parent::init() na začátku !
         */</span>
        parent::init();
    }
}</code></pre>
Pro někoho se znalostmi OOP to není nic překvapujícího, ale pro OOP
začátečníky je tohle několik bezesných nocí. okud by si někdo chtěl
doplnit vzdělání, tak doporučuji:
<ul>
	<li>PHP: <a
	href="http://php.interval.cz/objektove-orientovane-programovani-oop-v-php/">http://php.interval.cz/…i-oop-v-php/</a></li>

	<li>Pascal: <a
	href="http://www.sweb.cz/david.padrta/pascal/7oop.html">http://www.sweb.cz/…al/7oop.html</a></li>

	<li>Teoreticky: <a
	href="http://www.smt.pilsedu.cz/~jojo/Vyt/OOP.htm">http://www.smt.pilsedu.cz/…/Vyt/OOP.htm</a></li>
</ul>

<p>Zdrojové kódy ke screencastu budou k dispozici během
příštího týdne.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.red-pill.cz/2008/10/31/dil-1-prihlasovani-uzivatelu/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Zend_View_Helper_Url &#8211; pár tipů</title>
		<link>http://blog.red-pill.cz/2008/05/25/zend_view_helper_url-par-tipu/</link>
		<comments>http://blog.red-pill.cz/2008/05/25/zend_view_helper_url-par-tipu/#comments</comments>
		<pubDate>Sun, 25 May 2008 19:20:35 +0000</pubDate>
		<dc:creator>tomas.fejfar</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Programování]]></category>
		<category><![CDATA[Třídy]]></category>
		<category><![CDATA[Zend Framework]]></category>

		<guid isPermaLink="false">http://blog.red-pill.cz/2008/05/25/zend_view_helper_url-par-tipu/</guid>
		<description><![CDATA[
<!-- by Texy2! -->]]></description>
			<content:encoded><![CDATA[
<p>V aplikaci mám helper, který generuje menu ze stromu do UL. V něm jsem
chtěl nějak elegantně vyřešit routování na kategorie a i na root webu.
Řekl jsem si, že to udělám přes Zend_View_Hel­per_Url a routy, abych
nemusel přepisovat URL, kdyby se něco změnilo až budu vyvíjet dál.
S routami kategorií nebyl problém. Ale když sem si chtěl udělat „null“
routu na root webu, tak jsem pohořel, protože router očekává aspoň
nějaké parametry a routa "" mu nebyla dost dobrá.<span id="more-76"></span>
Nakonec to nebylo ani tak složité, ale třeba to někomu ušetří práci
(doufám, že zápis v mém interním formátu nebude moc zmatečný):</p>

<pre class="html"><code><span
class="html-tag">&lt;route&gt;</span>
        <span
class="html-tag">&lt;name&gt;</span>base<span
class="html-tag">&lt;/name&gt;</span>
        <span
class="html-tag">&lt;url&gt;</span>:root<span
class="html-tag">&lt;/url&gt;</span>
        <span
class="html-tag">&lt;params&gt;</span>
                <span
class="html-tag">&lt;module&gt;</span>shop<span
class="html-tag">&lt;/module&gt;</span>
                <span
class="html-tag">&lt;controller&gt;</span>index<span
class="html-tag">&lt;/controller&gt;</span>
                <span
class="html-tag">&lt;action&gt;</span>index<span
class="html-tag">&lt;/action&gt;</span>
        <span
class="html-tag">&lt;/params&gt;</span>
<span
class="html-tag">&lt;/route&gt;</span></code></pre>

<p>A potom prostě pošlete ten argument root prázdný :)</p>

<pre class="php"><code><span class="php-var">$url</span> = <span
class="php-keyword1">new</span> Zend_View_Helper_Url();
<span
class="php-var">$url</span>-&gt;url(<span
class="php-keyword2">array</span>(<span
class="php-quote">'root'</span>=&gt;<span class="php-quote">''</span>),<span
class="php-quote">'base'</span>);</code></pre>

<p>Další užitečnou věcí je, že pokud ve svém helperu potřebujete
používat aktuální view objekt, musíte nadefinovat interface, kterým ho
Helper Broker injectne do vašeho helperu. Popis jak na to najdete <a
href="http://framework.zend.com/manual/en/zend.view.helpers.html">v manuálu</a>
(úplně dole). Pak můžete používat v klidu registrované view helpery ve
svém helperu – tedy budete mít např. k ruce Zend_View_Hel­per_Partial
(můj oblíbený :) )</p>

<!-- by Texy2! -->]]></content:encoded>
			<wfw:commentRss>http://blog.red-pill.cz/2008/05/25/zend_view_helper_url-par-tipu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
