<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">
  <channel>
    <title>Blog on Random thoughts</title>
    <link>https://harikt.com/blog/</link>
    <description>Recent content in Blog on Random thoughts</description>
    <generator>Hugo -- gohugo.io</generator>
    <language>en-GB</language>
    <lastBuildDate>Fri, 29 Nov 2019 01:04:31 +0530</lastBuildDate>
    <atom:link href="https://harikt.com/blog/index.xml" rel="self" type="application/rss+xml"/>
    
    <itunes:explicit>no</itunes:explicit><itunes:subtitle>Recent content in Blog on Random thoughts</itunes:subtitle><item>
      <title>Symfony Debug to Error Handler Component</title>
      <link>https://harikt.com/blog/2019/11/29/symfony-debug-to-error-handler-component/</link>
      <pubDate>Fri, 29 Nov 2019 01:04:31 +0530</pubDate>
      <guid>https://harikt.com/blog/2019/11/29/symfony-debug-to-error-handler-component/</guid>
      <description>&lt;p&gt;Since symfony 4.4 the &lt;code&gt;symfony/debug&lt;/code&gt; component is deprecated.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The &amp;ldquo;\Symfony\Component\Debug\ErrorHandler&amp;rdquo; class is deprecated since Symfony 4.4, use &amp;ldquo;\Symfony\Component\ErrorHandler\ErrorHandler&amp;rdquo;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Running unit tests on &lt;a href="https://github.com/MascotPhp/Mascot/blob/70b41240a5db8a84d0e8aa57995fded21052b9e4/src/ExceptionHandler.php#L37-L44"&gt;Mascot&lt;/a&gt;,
I noticed lots of warnings.&lt;/p&gt;
&lt;p&gt;But it was not easy as changing &lt;code&gt;Symfony\Component\Debug\ExceptionHandler&lt;/code&gt; to &lt;code&gt;Symfony\Component\ErrorHandler\ErrorHandler&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Assume we have something as below&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code&gt;&lt;span style="display:block;width:100%;background-color:#3c3d38"&gt;&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;37
&lt;/span&gt;&lt;/span&gt;&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;38
&lt;/span&gt;&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;39
&lt;/span&gt;&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;40
&lt;/span&gt;&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;41
&lt;/span&gt;&lt;span style="display:block;width:100%;background-color:#3c3d38"&gt;&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;42
&lt;/span&gt;&lt;/span&gt;&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;43
&lt;/span&gt;&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;44
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="display:block;width:100%;background-color:#3c3d38"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;/span&gt;$handler &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;\Symfony\Component\Debug\ExceptionHandler&lt;/span&gt;($debug);
$exception &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $event&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getThrowable&lt;/span&gt;();
&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#f92672"&gt;!&lt;/span&gt;$exception &lt;span style="color:#a6e22e"&gt;instanceof&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;FlattenException&lt;/span&gt;) {
    $exception &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;FlattenException&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;create&lt;/span&gt;($exception);
&lt;span style="display:block;width:100%;background-color:#3c3d38"&gt;}
&lt;/span&gt;$response &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Response&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;create&lt;/span&gt;($handler&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getHtml&lt;/span&gt;($exception), $exception&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getStatusCode&lt;/span&gt;(), $exception&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getHeaders&lt;/span&gt;())&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setCharset&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;ini_get&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;default_charset&amp;#39;&lt;/span&gt;));
$event&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setResponse&lt;/span&gt;($response);
&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;The &lt;code&gt;Symfony\Component\ErrorHandler\ErrorHandler&lt;/code&gt; has no &lt;code&gt;getHtml&lt;/code&gt; method.&lt;/p&gt;
&lt;p&gt;From the symfony docs, if you are in development mode we can use below code.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; ($_SERVER[&lt;span style="color:#e6db74"&gt;&amp;#39;APP_DEBUG&amp;#39;&lt;/span&gt;]) {
    &lt;span style="color:#a6e22e"&gt;Debug&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;enable&lt;/span&gt;();
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;so I started with&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#a6e22e"&gt;ErrorHandler&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;register&lt;/span&gt;();
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;But it was throwing all details. I was struggling how to fix this.
After many failed experiments, I asked &lt;a href="https://twitter.com/YonelCerutoG"&gt;Yonel Ceruto Gonzalez&lt;/a&gt;.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Sets the scope at 0 to tell the handler that it is in &amp;ldquo;non-debug&amp;rdquo; mode:&lt;/p&gt;
&lt;p&gt;$errorHandler-&amp;gt;scopeAt(0, true);&lt;/p&gt;
&lt;p&gt;However, don't expect the real exception message in non-debug mode, it could reveal sensitive information.&lt;/p&gt;
&lt;p&gt;— &lt;!-- raw HTML omitted --&gt;Yonel Ceruto Gonzalez&lt;sup id="fnref:1"&gt;&lt;a href="#fn:1" class="footnote-ref" role="doc-noteref"&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The above information was really helpful to do more experiments. I finally fixed the unit tests with the below code.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;width:auto;overflow:auto;display:block;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&gt;
&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code&gt;&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;37
&lt;/span&gt;&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;38
&lt;/span&gt;&lt;span style="display:block;width:100%;background-color:#3c3d38"&gt;&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;39
&lt;/span&gt;&lt;/span&gt;&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;40
&lt;/span&gt;&lt;span style="display:block;width:100%;background-color:#3c3d38"&gt;&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;41
&lt;/span&gt;&lt;/span&gt;&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;42
&lt;/span&gt;&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;43
&lt;/span&gt;&lt;span style="display:block;width:100%;background-color:#3c3d38"&gt;&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;44
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:block;width:100%;background-color:#3c3d38"&gt;&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;45
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:block;width:100%;background-color:#3c3d38"&gt;&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;46
&lt;/span&gt;&lt;/span&gt;&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;47
&lt;/span&gt;&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;48
&lt;/span&gt;&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;49
&lt;/span&gt;&lt;span style="display:block;width:100%;background-color:#3c3d38"&gt;&lt;span style="margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;50
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&gt;
&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
$handler &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;\Symfony\Component\ErrorHandler\ErrorHandler&lt;/span&gt;();
&lt;span style="display:block;width:100%;background-color:#3c3d38"&gt;$handler&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setExceptionHandler&lt;/span&gt;([$handler, &lt;span style="color:#e6db74"&gt;&amp;#39;renderException&amp;#39;&lt;/span&gt;]);
&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#f92672"&gt;!&lt;/span&gt; $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;debug&lt;/span&gt;) {
&lt;span style="display:block;width:100%;background-color:#3c3d38"&gt;    $handler&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;scopeAt&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;);
&lt;/span&gt;}
$exception &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $event&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getThrowable&lt;/span&gt;();
&lt;span style="display:block;width:100%;background-color:#3c3d38"&gt;&lt;span style="color:#a6e22e"&gt;ob_start&lt;/span&gt;();
&lt;/span&gt;&lt;span style="display:block;width:100%;background-color:#3c3d38"&gt;$handler&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;handleException&lt;/span&gt;($exception);
&lt;/span&gt;&lt;span style="display:block;width:100%;background-color:#3c3d38"&gt;$response &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ob_get_clean&lt;/span&gt;();
&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#f92672"&gt;!&lt;/span&gt;$exception &lt;span style="color:#a6e22e"&gt;instanceof&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;FlattenException&lt;/span&gt;) {
    $exception &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;FlattenException&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;create&lt;/span&gt;($exception);
}
&lt;span style="display:block;width:100%;background-color:#3c3d38"&gt;$response &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Response&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;create&lt;/span&gt;($response, $exception&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getStatusCode&lt;/span&gt;(), $exception&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getHeaders&lt;/span&gt;())&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setCharset&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;ini_get&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;default_charset&amp;#39;&lt;/span&gt;));
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;p&gt;I hope this information may help someone at somepoint of time.&lt;/p&gt;
&lt;section class="footnotes" role="doc-endnotes"&gt;
&lt;hr&gt;
&lt;ol&gt;
&lt;li id="fn:1" role="doc-endnote"&gt;
&lt;p&gt;Taken from twitter status &lt;a href="https://twitter.com/YonelCerutoG/status/1199767714035912704"&gt;Yonel Ceruto Gonzalez&lt;/a&gt;&lt;/p&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/section&gt;
</description>
    </item>
    
    <item>
      <title>building modular applications with psr 7</title>
      <link>https://harikt.com/blog/2017/03/24/building-modular-applications-with-psr-7/</link>
      <pubDate>Fri, 24 Mar 2017 00:00:00 +0000</pubDate>
      <guid>https://harikt.com/blog/2017/03/24/building-modular-applications-with-psr-7/</guid>
      <description>&lt;p&gt;&lt;a href="http://www.php-fig.org/psr/psr-7/"&gt;PSR-7, the HTTP message interfaces&lt;/a&gt; opened
a new door of creating modular applications.&lt;/p&gt;
&lt;p&gt;Sadly many of the PSR-7 implementations added many helper methods.&lt;/p&gt;
&lt;p&gt;So if someone is creating a library that needs a PSR-7 implementations they tie
the particular library with the PSR-7 implementation and use these convinient helper methods.&lt;/p&gt;
&lt;p&gt;So was &lt;a href="https://github.com/http-interop/http-middleware"&gt;PSR-15: interfaces for HTTP Middleware&lt;/a&gt;
and &lt;a href="https://github.com/http-interop/http-factory"&gt;PSR-17: interfaces for HTTP Factories&lt;/a&gt;
was proposed.&lt;/p&gt;
&lt;p&gt;When creating a module one of the most challenging part is how to serve the
javascript, css and images. We are going to use
&lt;a href="github.com/harikt/psr7-asset"&gt;hkt/psr7-asset&lt;/a&gt; which is a fork of
&lt;a href="https://github.com/friendsofaura/Aura.Asset_Bundle/"&gt;Aura.Asset_Bundle&lt;/a&gt; .
What you want to do is only map the path to the assets folder.&lt;/p&gt;
&lt;p&gt;We can discuss more on the features later and start writing our first module.
The source code of the module is hosted at &lt;a href="https://github.com/harikt/psr7-asset-example"&gt;github&lt;/a&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-bash" data-lang="bash"&gt;mkdir -p &lt;span style="color:#f92672"&gt;{&lt;/span&gt;src/&lt;span style="color:#f92672"&gt;{&lt;/span&gt;Middleware&lt;span style="color:#f92672"&gt;}&lt;/span&gt;,templates,public/&lt;span style="color:#f92672"&gt;{&lt;/span&gt;css,images,js&lt;span style="color:#f92672"&gt;}&lt;/span&gt;&lt;span style="color:#f92672"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The command will create folder structure as below.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you are not using *nix probably you want to create each folder separately.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-bash" data-lang="bash"&gt;├── public
│   ├── css
│   ├── images
│   └── js
├── src
│   └── Middleware
└── templates
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Lets create our &lt;code&gt;Welcome&lt;/code&gt; middleware.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;namespace&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Hkt\Psr7AssetExample\Middleware&lt;/span&gt;;

&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Interop\Http\Factory\ResponseFactoryInterface&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Interop\Http\ServerMiddleware\MiddlewareInterface&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Interop\Http\ServerMiddleware\DelegateInterface&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Psr\Http\Message\ServerRequestInterface&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Zend\Expressive\Template\TemplateRendererInterface&lt;/span&gt;;

&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Welcome&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;implements&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;MiddlewareInterface&lt;/span&gt;
{
    &lt;span style="color:#66d9ef"&gt;private&lt;/span&gt; $template;

    &lt;span style="color:#66d9ef"&gt;private&lt;/span&gt; $responseFactory;

    &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; __construct(
        &lt;span style="color:#a6e22e"&gt;TemplateRendererInterface&lt;/span&gt; $template,
        &lt;span style="color:#a6e22e"&gt;ResponseFactoryInterface&lt;/span&gt; $responseFactory
    ) {
        $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;template&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $template;
        $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;responseFactory&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $responseFactory;
    }

    &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;process&lt;/span&gt;(
        &lt;span style="color:#a6e22e"&gt;ServerRequestInterface&lt;/span&gt; $request,
        &lt;span style="color:#a6e22e"&gt;DelegateInterface&lt;/span&gt; $delegate
    ) {
        $response &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;responseFactory&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;createResponse&lt;/span&gt;();
        $response &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $response&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;withHeader&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;Content-Type&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;text/html&amp;#39;&lt;/span&gt;);
        $response&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getBody&lt;/span&gt;()&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;write&lt;/span&gt;(
            $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;template&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;render&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;hkt-psr7-asset-example::welcome&amp;#39;&lt;/span&gt;, [])
        );
        &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; $response;
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can see we have not tied the &lt;code&gt;Welcome&lt;/code&gt; class to any PSR-7 implementation.
But instead to many interfaces. This helps us to use &lt;code&gt;Welcome&lt;/code&gt; middleware with any PSR-7 based frameworks.&lt;/p&gt;
&lt;h2 id="how-can-we-serve-the-static-files"&gt;How can we serve the static files?&lt;/h2&gt;
&lt;p&gt;This can be solved with &lt;a href="https://github.com/zfcampus/zf-asset-manager"&gt;zf-asset-manager&lt;/a&gt;.
What it does is copy the assets to the public folder and the files are served by  webserver.&lt;/p&gt;
&lt;p&gt;But what about if you need to alter the behaviour of the file?&lt;/p&gt;
&lt;p&gt;Eg : You want to override the &lt;code&gt;hello.js&lt;/code&gt; contents with something like&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-js" data-lang="js"&gt;&lt;span style="color:#a6e22e"&gt;$&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; () {
    &lt;span style="color:#a6e22e"&gt;alert&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;Hello World&amp;#34;&lt;/span&gt;);
});
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is possible with the &lt;code&gt;hkt/psr7-asset&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;What you need is get the asset locator and set the path to &lt;code&gt;vendor/package&lt;/code&gt; as&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
$assetLocator &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $di&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;get&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;Hkt\Psr7Asset\AssetLocator&amp;#39;&lt;/span&gt;);
$assetLocator&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;set&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;hkt/psr7-asset-example&amp;#39;&lt;/span&gt;, &lt;span style="color:#a6e22e"&gt;dirname&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;dirname&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;__DIR__&lt;/span&gt;)) &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;/public&amp;#39;&lt;/span&gt;);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;alternatievely you can set individual paths or files also.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
$assetLocator &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $di&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;get&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;Hkt\Psr7Asset\AssetLocator&amp;#39;&lt;/span&gt;);
$assetLocator&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;set&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;vendor/package/images/someimage.png&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;/path/to/different-image.png&amp;#39;&lt;/span&gt;);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The full source code of the example module is at &lt;a href="https://github.com/harikt/psr7-asset-example"&gt;&lt;a href="https://github.com/harikt/psr7-asset-example"&gt;https://github.com/harikt/psr7-asset-example&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="how-can-we-make-use-of-this-module-in-your-application"&gt;How can we make use of this module in your application?&lt;/h2&gt;
&lt;p&gt;Any frameworks that supports psr-7, psr-15 and psr-17 interfaces should work. We will use zend expressive with &lt;a href="https://github.com/auraphp/Aura.Di"&gt;Aura.Di&lt;/a&gt; as dependency injection container and &lt;a href="https://github.com/auraphp/Aura.Router"&gt;Aura.Router&lt;/a&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;composer create-project zendframework/zend-expressive-skeleton expressive
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Below is selection process&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-bash" data-lang="bash"&gt;Installing zendframework/zend-expressive-skeleton &lt;span style="color:#f92672"&gt;(&lt;/span&gt;2.0.1&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
  - Installing zendframework/zend-expressive-skeleton &lt;span style="color:#f92672"&gt;(&lt;/span&gt;2.0.1&lt;span style="color:#f92672"&gt;)&lt;/span&gt; Loading from cache
Created project in expressive
&amp;gt; ExpressiveInstaller&lt;span style="color:#ae81ff"&gt;\O&lt;/span&gt;ptionalPackages::install
Setting up optional packages
Setup data and cache dir
Removing installer development dependencies

  What type of installation would you like?
  &lt;span style="color:#f92672"&gt;[&lt;/span&gt;1&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Minimal &lt;span style="color:#f92672"&gt;(&lt;/span&gt;no default middleware, templates, or assets; configuration only&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
  &lt;span style="color:#f92672"&gt;[&lt;/span&gt;2&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Flat &lt;span style="color:#f92672"&gt;(&lt;/span&gt;flat source code structure; default selection&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
  &lt;span style="color:#f92672"&gt;[&lt;/span&gt;3&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Modular &lt;span style="color:#f92672"&gt;(&lt;/span&gt;modular source code structure; recommended&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
  Make your selection &lt;span style="color:#f92672"&gt;(&lt;/span&gt;2&lt;span style="color:#f92672"&gt;)&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;3&lt;/span&gt;
  - Adding package zendframework/zend-expressive-tooling &lt;span style="color:#f92672"&gt;(&lt;/span&gt;^0.3.2&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
  - Copying src/App/src/ConfigProvider.php

  Which container &lt;span style="color:#66d9ef"&gt;do&lt;/span&gt; you want to use &lt;span style="color:#66d9ef"&gt;for&lt;/span&gt; dependency injection?
  &lt;span style="color:#f92672"&gt;[&lt;/span&gt;1&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Aura.Di
  &lt;span style="color:#f92672"&gt;[&lt;/span&gt;2&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Pimple
  &lt;span style="color:#f92672"&gt;[&lt;/span&gt;3&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Zend ServiceManager
  Make your selection or type a composer package name and version &lt;span style="color:#f92672"&gt;(&lt;/span&gt;Zend ServiceManager&lt;span style="color:#f92672"&gt;)&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
  - Adding package aura/di &lt;span style="color:#f92672"&gt;(&lt;/span&gt;^3.2&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
  - Copying config/container.php
  - Copying config/ExpressiveAuraConfig.php
  - Copying config/ExpressiveAuraDelegatorFactory.php

  Which router &lt;span style="color:#66d9ef"&gt;do&lt;/span&gt; you want to use?
  &lt;span style="color:#f92672"&gt;[&lt;/span&gt;1&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Aura.Router
  &lt;span style="color:#f92672"&gt;[&lt;/span&gt;2&lt;span style="color:#f92672"&gt;]&lt;/span&gt; FastRoute
  &lt;span style="color:#f92672"&gt;[&lt;/span&gt;3&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Zend Router
  Make your selection or type a composer package name and version &lt;span style="color:#f92672"&gt;(&lt;/span&gt;FastRoute&lt;span style="color:#f92672"&gt;)&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
  - Adding package zendframework/zend-expressive-aurarouter &lt;span style="color:#f92672"&gt;(&lt;/span&gt;^2.0&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
  - Copying config/routes.php
  - Copying config/autoload/router.global.php

  Which template engine &lt;span style="color:#66d9ef"&gt;do&lt;/span&gt; you want to use?
  &lt;span style="color:#f92672"&gt;[&lt;/span&gt;1&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Plates
  &lt;span style="color:#f92672"&gt;[&lt;/span&gt;2&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Twig
  &lt;span style="color:#f92672"&gt;[&lt;/span&gt;3&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Zend View installs Zend ServiceManager
  &lt;span style="color:#f92672"&gt;[&lt;/span&gt;n&lt;span style="color:#f92672"&gt;]&lt;/span&gt; None of the above
  Make your selection or type a composer package name and version &lt;span style="color:#f92672"&gt;(&lt;/span&gt;n&lt;span style="color:#f92672"&gt;)&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;
  - Adding package zendframework/zend-expressive-twigrenderer &lt;span style="color:#f92672"&gt;(&lt;/span&gt;^1.4&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
  - Copying config/autoload/templates.global.php
  - Copying src/App/templates/error/404.html.twig
  - Copying src/App/templates/error/error.html.twig
  - Copying src/App/templates/layout/default.html.twig
  - Copying src/App/templates/app/home-page.html.twig

  Which error handler &lt;span style="color:#66d9ef"&gt;do&lt;/span&gt; you want to use during development?
  &lt;span style="color:#f92672"&gt;[&lt;/span&gt;1&lt;span style="color:#f92672"&gt;]&lt;/span&gt; Whoops
  &lt;span style="color:#f92672"&gt;[&lt;/span&gt;n&lt;span style="color:#f92672"&gt;]&lt;/span&gt; None of the above
  Make your selection or type a composer package name and version &lt;span style="color:#f92672"&gt;(&lt;/span&gt;Whoops&lt;span style="color:#f92672"&gt;)&lt;/span&gt;: &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
  - Adding package filp/whoops &lt;span style="color:#f92672"&gt;(&lt;/span&gt;^2.1.7&lt;span style="color:#f92672"&gt;)&lt;/span&gt;
  - Copying config/autoload/development.local.php.dist
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Once the installation is finished we can start integrating the module.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;cd expressive
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Add to your &lt;code&gt;composer.json&lt;/code&gt; the below configuration.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-json" data-lang="json"&gt;    &lt;span style="color:#e6db74"&gt;&amp;#34;repositories&amp;#34;&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;:&lt;/span&gt; [
        {
            &lt;span style="color:#f92672"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;git&amp;#34;&lt;/span&gt;,
            &lt;span style="color:#f92672"&gt;&amp;#34;url&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;https://github.com/harikt/psr7-asset-example&amp;#34;&lt;/span&gt;
        }
    ]&lt;span style="color:#960050;background-color:#1e0010"&gt;,&lt;/span&gt;
    &lt;span style="color:#e6db74"&gt;&amp;#34;require&amp;#34;&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;:&lt;/span&gt; {
        &lt;span style="color:#f92672"&gt;&amp;#34;http-interop/http-factory-diactoros&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;^0.2.0&amp;#34;&lt;/span&gt;,
        &lt;span style="color:#f92672"&gt;&amp;#34;hkt/psr7-asset-example&amp;#34;&lt;/span&gt;:&lt;span style="color:#e6db74"&gt;&amp;#34;1.*@dev&amp;#34;&lt;/span&gt;,
        &lt;span style="color:#f92672"&gt;&amp;#34;hkt/psr7-asset&amp;#34;&lt;/span&gt;:&lt;span style="color:#e6db74"&gt;&amp;#34;1.*@dev&amp;#34;&lt;/span&gt;,
        &lt;span style="color:#960050;background-color:#1e0010"&gt;.&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;.&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;.&lt;/span&gt;
    }&lt;span style="color:#960050;background-color:#1e0010"&gt;,&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;I think the dependencies are self explanatory. In case you need any help feel free to comment on the post.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;We need a few things for the assets to be displayed.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Add the asset router. So that any request coming to &lt;code&gt;/asset/*&lt;/code&gt; can be served by &lt;code&gt;Hkt\Psr7Asset\AssetAction&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Configure the &lt;code&gt;Interop\Http\Factory\ResponseFactoryInterface&lt;/code&gt; to return an instance of &lt;code&gt;Http\Factory\Diactoros\ResponseFactory&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Add a route to serve the example welcome action &amp;lsquo;Hkt\Psr7AssetExample\Middleware\Welcome&amp;rsquo;&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Below is what we can do with Aura.Di configuration.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#75715e"&gt;// src/App/src/Config/Common.php
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;namespace&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;App\Config&lt;/span&gt;;

&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Aura\Di\Container&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Aura\Di\ContainerConfigInterface&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Zend\Expressive\Router\Route&lt;/span&gt;;

&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Common&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;implements&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ContainerConfigInterface&lt;/span&gt;
{
    &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;define&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;Container&lt;/span&gt; $di)
    {
        $di&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;set&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;Interop\Http\Factory\ResponseFactoryInterface&amp;#39;&lt;/span&gt;, $di&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;lazyNew&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;Http\Factory\Diactoros\ResponseFactory&amp;#39;&lt;/span&gt;));
    }

    &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;modify&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;Container&lt;/span&gt; $di)
    {
        $router &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $di&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;get&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;Zend\Expressive\Router\RouterInterface&amp;#39;&lt;/span&gt;);

        &lt;span style="color:#75715e"&gt;// PSR-7 asset Router
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;
        $route &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Route&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;/asset/{vendor}/{package}/{file}&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;Hkt\Psr7Asset\AssetAction&amp;#39;&lt;/span&gt;, [&lt;span style="color:#e6db74"&gt;&amp;#39;GET&amp;#39;&lt;/span&gt;], &lt;span style="color:#e6db74"&gt;&amp;#39;hkt/psr7-asset&amp;#39;&lt;/span&gt;);
        $route&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setOptions&lt;/span&gt;([
            &lt;span style="color:#e6db74"&gt;&amp;#39;tokens&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; [
                &lt;span style="color:#e6db74"&gt;&amp;#39;file&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;(.*)&amp;#39;&lt;/span&gt;
            ]
        ]);
        $router&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;addRoute&lt;/span&gt;($route);
        $router&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;addRoute&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Route&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;/&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;Hkt\Psr7AssetExample\Middleware\Welcome&amp;#39;&lt;/span&gt;, [&lt;span style="color:#e6db74"&gt;&amp;#39;GET&amp;#39;&lt;/span&gt;], &lt;span style="color:#e6db74"&gt;&amp;#39;hkt/psr7-asset-example:welcome&amp;#39;&lt;/span&gt;));
        &lt;span style="color:#75715e"&gt;// Try modifying the below lines
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;        &lt;span style="color:#75715e"&gt;// $assetLocator = $di-&amp;gt;get(&amp;#39;Hkt\Psr7Asset\AssetLocator&amp;#39;);
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;        &lt;span style="color:#75715e"&gt;// $rootPath = dirname(dirname(dirname(dirname(__DIR__))));
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;        &lt;span style="color:#75715e"&gt;// $assetLocator-&amp;gt;set(&amp;#39;hkt/psr7-asset-example/images/white-image.png&amp;#39;, $rootPath . &amp;#39;/public/zf-logo.png&amp;#39;);
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now we can load the Aura.Di configuration in &lt;code&gt;config/container.php&lt;/code&gt; .&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#f92672"&gt;....&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;more&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;code&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;

&lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; $builder&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;newConfiguredInstance&lt;/span&gt;([
    &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ExpressiveAuraConfig&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;is_array&lt;/span&gt;($config) &lt;span style="color:#f92672"&gt;?&lt;/span&gt; $config &lt;span style="color:#f92672"&gt;:&lt;/span&gt; []),
    &lt;span style="color:#a6e22e"&gt;Hkt\Psr7Asset\Container\AssetConfig&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;,
    &lt;span style="color:#a6e22e"&gt;Hkt\Psr7AssetExample\Container\Common&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;,
    &lt;span style="color:#a6e22e"&gt;App\Config\Common&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;class&lt;/span&gt;,
]);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;What it does, is load different configurations of different modules.&lt;/p&gt;
&lt;p&gt;If you run&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-bash" data-lang="bash"&gt;php -S 0.0.0.0:8080 -t public public/index.php
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and point to &lt;code&gt;http://localhost:8080&lt;/code&gt; you can see the welcome screen of example module.&lt;/p&gt;
&lt;p&gt;Try modifying the &lt;code&gt;hkt/psr7-asset-example/images/white-image.png&lt;/code&gt; path to a different image and browse  http://localhost:8080/asset/hkt/psr7-asset-example/images/white-image.png&lt;/p&gt;
&lt;p&gt;It will render that image.&lt;/p&gt;
&lt;p&gt;All source code is accompanied at &lt;a href="https://github.com/harikt/psr7-asset-example-zendexpressive"&gt;&lt;a href="https://github.com/harikt/psr7-asset-example-zendexpressive"&gt;https://github.com/harikt/psr7-asset-example-zendexpressive&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="caching"&gt;Caching&lt;/h2&gt;
&lt;p&gt;We can use psr7-asset-cache to cache all public files in production.&lt;/p&gt;
&lt;p&gt;Hope this will be helpful to someone to begin writing modular applications.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>using cakephp migration as standalone</title>
      <link>https://harikt.com/blog/2017/03/24/using-cakephp-migration-as-standalone/</link>
      <pubDate>Fri, 24 Mar 2017 00:00:00 +0000</pubDate>
      <guid>https://harikt.com/blog/2017/03/24/using-cakephp-migration-as-standalone/</guid>
      <description>&lt;p&gt;Cakephp version 3 have a nice ORM. When using the &lt;code&gt;cakephp/orm&lt;/code&gt;,
it may be nice to integrate &lt;code&gt;cakephp/migration&lt;/code&gt; than any other migration
libraries, even though it uses phinx under the hood.&lt;/p&gt;
&lt;p&gt;Lets see how we can install and integrate &lt;code&gt;cakephp/migration&lt;/code&gt; in our application.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;composer require cakephp/migrations:dev-master
&lt;/code&gt;&lt;/pre&gt;&lt;blockquote&gt;
&lt;p&gt;The dev-master is currently passed for we need the latest version of master branch.
Before &lt;a href="https://github.com/cakephp/migrations/pull/308"&gt;this pull request&lt;/a&gt;, it was
having dependency on &lt;code&gt;cakephp/cakephp&lt;/code&gt;, which is not needed.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Our migration console script&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;#!/usr/bin/env php
&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Cake\Cache\Cache&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Cake\Core\Configure&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Cake\Core\Configure\Engine\PhpConfig&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Cake\Datasource\ConnectionManager&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Migrations\MigrationsDispatcher&lt;/span&gt;;

$projectDirectory &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;dirname&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;__DIR__&lt;/span&gt;);
$file   &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $projectDirectory &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;DIRECTORY_SEPARATOR&lt;/span&gt; &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;vendor&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;DIRECTORY_SEPARATOR&lt;/span&gt; &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;autoload.php&amp;#39;&lt;/span&gt;;
$loader &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;null&lt;/span&gt;;

&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;file_exists&lt;/span&gt;($file)) {

    $loader &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;require&lt;/span&gt; $file;

    &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#f92672"&gt;!&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;defined&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;CACHE&amp;#39;&lt;/span&gt;)) {
        &lt;span style="color:#a6e22e"&gt;define&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;CACHE&amp;#39;&lt;/span&gt;, $projectDirectory &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;DIRECTORY_SEPARATOR&lt;/span&gt; &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;tmp&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;DIRECTORY_SEPARATOR&lt;/span&gt; &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;cache&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;DIRECTORY_SEPARATOR&lt;/span&gt;);
    }
}

&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; ( &lt;span style="color:#f92672"&gt;!&lt;/span&gt; $loader) {
    &lt;span style="color:#66d9ef"&gt;throw&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;RuntimeException&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;vendor/autoload.php could not be found. Did you run `composer install`?&amp;#39;&lt;/span&gt;);
}

&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#f92672"&gt;!&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;defined&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;PHINX_VERSION&amp;#39;&lt;/span&gt;)) {
    &lt;span style="color:#a6e22e"&gt;define&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;PHINX_VERSION&amp;#39;&lt;/span&gt;, (&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt; &lt;span style="color:#f92672"&gt;===&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;strpos&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;@PHINX_VERSION@&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;@PHINX_VERSION&amp;#39;&lt;/span&gt;)) &lt;span style="color:#f92672"&gt;?&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;0.6.6&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;@PHINX_VERSION@&amp;#39;&lt;/span&gt;);
}

&lt;span style="color:#66d9ef"&gt;try&lt;/span&gt; {
    &lt;span style="color:#a6e22e"&gt;Configure&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;config&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;default&amp;#39;&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;PhpConfig&lt;/span&gt;($projectDirectory &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;DIRECTORY_SEPARATOR&lt;/span&gt; &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;config&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;DIRECTORY_SEPARATOR&lt;/span&gt;) );
    &lt;span style="color:#a6e22e"&gt;Configure&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;load&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;app&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;default&amp;#39;&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;false&lt;/span&gt;);
} &lt;span style="color:#66d9ef"&gt;catch&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;\Exception&lt;/span&gt; $e) {
    &lt;span style="color:#66d9ef"&gt;exit&lt;/span&gt;($e&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getMessage&lt;/span&gt;() &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\n&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;);
}

&lt;span style="color:#a6e22e"&gt;Cache&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setConfig&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;Configure&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;consume&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;Cache&amp;#39;&lt;/span&gt;));
&lt;span style="color:#a6e22e"&gt;ConnectionManager&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setConfig&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;Configure&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;consume&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;Datasources&amp;#39;&lt;/span&gt;));
$application &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;MigrationsDispatcher&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;PHINX_VERSION&lt;/span&gt;);
$application&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;run&lt;/span&gt;();
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You may notice the constant &lt;code&gt;CACHE&lt;/code&gt;. We can get rid of
constants if needed. Normally I copy portions of  &lt;a href="https://github.com/cakephp/app/blob/fa4ff8c9784abec3c306e0210ce79afe11ba21b5/config/app.default.php#L220-L283"&gt;config/app.default.php&lt;/a&gt; and keep in &lt;code&gt;/config/app.php&lt;/code&gt; file which uses some of these constants.&lt;/p&gt;
&lt;p&gt;Once done, we can run the migration script as&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-bash" data-lang="bash"&gt;bin/cake-phinx
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;You may probably want to allow necessary permission for the script
to execute. You can do via &lt;code&gt;chmod +x bin/cake-phinx&lt;/code&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;There is another &lt;a href="https://github.com/cakephp/migrations/pull/312"&gt;PR 312&lt;/a&gt; waiting for approval. If it is merged you will get all the functionalities of  &lt;a href="https://book.cakephp.org/3.0/en/console-and-shells/orm-cache.html"&gt;&lt;a href="https://book.cakephp.org/3.0/en/console-and-shells/orm-cache.html"&gt;https://book.cakephp.org/3.0/en/console-and-shells/orm-cache.html&lt;/a&gt;&lt;/a&gt;&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;PS : If you came across some errors regarding migration plugin not loaded etc.
You may want to add the below code before calling MigrationsDispatcher&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#a6e22e"&gt;Cake\Core\Plugin&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;load&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;Migrations&amp;#39;&lt;/span&gt;, [
    &lt;span style="color:#e6db74"&gt;&amp;#39;path&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; $projectDirectory &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;/vendor/cakephp/migrations/&amp;#39;&lt;/span&gt;,
]);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>aura dot di 2 dot x to 3 dot x upgrade guide</title>
      <link>https://harikt.com/blog/2016/03/15/aura-dot-di-2-dot-x-to-3-dot-x-upgrade-guide/</link>
      <pubDate>Tue, 15 Mar 2016 00:00:00 +0000</pubDate>
      <guid>https://harikt.com/blog/2016/03/15/aura-dot-di-2-dot-x-to-3-dot-x-upgrade-guide/</guid>
      <description>&lt;p&gt;3.x has a very minimal BC break. But if you are not sure what are they, then you may feel the pain.
I am trying to document most of them, incase I missed please &lt;a href="https://github.com/harikt/harikt.github.com/edit/source/source/_posts/2016-03-15-aura-dot-di-2-dot-x-to-3-dot-x-upgrade-guide.markdown"&gt;edit and send a pull request&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I will try to eventually pushed to the main Aura.Di repo.&lt;/p&gt;
&lt;h2 id="bc-breaks"&gt;BC Breaks&lt;/h2&gt;
&lt;h3 id="instantiation"&gt;Instantiation&lt;/h3&gt;
&lt;p&gt;The way di container is instantiated has been changed from&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Aura\Di\Container&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Aura\Di\Factory&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Aura\Di\ContainerBuilder&lt;/span&gt;;

$di &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Container&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Factory&lt;/span&gt;);

&lt;span style="color:#75715e"&gt;// or 
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;
$container_builder &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ContainerBuilder&lt;/span&gt;();
$di &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $container_builder&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;newInstance&lt;/span&gt;(
    &lt;span style="color:#66d9ef"&gt;array&lt;/span&gt;(),
    &lt;span style="color:#66d9ef"&gt;array&lt;/span&gt;(),
    $auto_resolve &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;false&lt;/span&gt;
);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;to&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Aura\Di\ContainerBuilder&lt;/span&gt;;

$container_builder &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ContainerBuilder&lt;/span&gt;();

&lt;span style="color:#75715e"&gt;// use the builder to create and configure a container
&lt;/span&gt;&lt;span style="color:#75715e"&gt;// using an array of ContainerConfig classes
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;$di &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $container_builder&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;newConfiguredInstance&lt;/span&gt;([
    &lt;span style="color:#e6db74"&gt;&amp;#39;Aura\Cli\_Config\Common&amp;#39;&lt;/span&gt;,
    &lt;span style="color:#e6db74"&gt;&amp;#39;Aura\Router\_Config\Common&amp;#39;&lt;/span&gt;,
    &lt;span style="color:#e6db74"&gt;&amp;#39;Aura\Web\_Config\Common&amp;#39;&lt;/span&gt;,
]);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="setter-vs-setters"&gt;setter vs setters&lt;/h3&gt;
&lt;p&gt;&lt;code&gt;$di-&amp;gt;setter&lt;/code&gt; is now &lt;code&gt;$di-&amp;gt;setters&lt;/code&gt;. Please note there is an additional &lt;code&gt;s&lt;/code&gt; in the end. &lt;a href="https://github.com/auraphp/Aura.Di/issues/115"&gt;&lt;a href="https://github.com/auraphp/Aura.Di/issues/115"&gt;https://github.com/auraphp/Aura.Di/issues/115&lt;/a&gt;&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="automatic-locking"&gt;Automatic locking&lt;/h3&gt;
&lt;p&gt;Automatic locking of container once an object is created by container. So make sure everything is lazy call, else you will run something like &lt;a href="https://github.com/auraphp/Aura.Di/issues/118"&gt;Cannot modify container when locked&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="config-vs-containerconfig"&gt;Config vs ContainerConfig&lt;/h3&gt;
&lt;p&gt;Version 2 &lt;a href="https://github.com/auraphp/Aura.Di/blob/2.2.4/src/Config.php"&gt;Aura\Di\Config&lt;/a&gt; is now &lt;a href="https://github.com/auraphp/Aura.Di/blob/3.0.0/src/ContainerConfig.php"&gt;Aura\Di\ContainerConfig&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="features"&gt;Features&lt;/h2&gt;
&lt;h3 id="lazygetcall"&gt;lazyGetCall&lt;/h3&gt;
&lt;p&gt;Example taken from &lt;a href="https://github.com/radarphp/Radar.Adr/blob/0b4fa74c4939a715562d60e37c1976fc59b420b6/src/Config.php#L50"&gt;Radar&lt;/a&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;$di-&amp;gt;params['Radar\Adr\Handler\RoutingHandler']['matcher'] = $di-&amp;gt;lazyGetCall('radar/adr:router', 'getMatcher');
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Here the &lt;code&gt;matcher&lt;/code&gt; assigned is taken from the &lt;a href="https://github.com/auraphp/Aura.Router/blob/3.0.0/src/RouterContainer.php#L263-L273"&gt;RouterContainer&lt;/a&gt; &lt;code&gt;getMatcher&lt;/code&gt; method.&lt;/p&gt;
&lt;h3 id="instance-factories"&gt;Instance Factories&lt;/h3&gt;
&lt;p&gt;Create multiple instances of the class. You can read the &lt;a href="http://auraphp.com/packages/3.x/Di/factories.html"&gt;docs&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>cakephp orm and logging queries</title>
      <link>https://harikt.com/blog/2016/01/16/cakephp-orm-and-logging-queries/</link>
      <pubDate>Sat, 16 Jan 2016 00:00:00 +0000</pubDate>
      <guid>https://harikt.com/blog/2016/01/16/cakephp-orm-and-logging-queries/</guid>
      <description>&lt;p&gt;Working with &lt;a href="http://packagist.org/packages/cakephp/orm"&gt;cakephp/orm&lt;/a&gt; library, I needed to log all the queries.
Cakephp provides a way to do it via &lt;a href="http://packagist.org/packages/cakephp/log"&gt;cakephp/log&lt;/a&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Cake\Log\Log&lt;/span&gt;;

&lt;span style="color:#a6e22e"&gt;Log&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;config&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;queries&amp;#39;&lt;/span&gt;, [
	&lt;span style="color:#e6db74"&gt;&amp;#39;className&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;File&amp;#39;&lt;/span&gt;,
	&lt;span style="color:#e6db74"&gt;&amp;#39;path&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;/my/log/path/&amp;#39;&lt;/span&gt;,
	&lt;span style="color:#e6db74"&gt;&amp;#39;file&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;app&amp;#39;&lt;/span&gt;,
	&lt;span style="color:#e6db74"&gt;&amp;#39;scopes&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; [&lt;span style="color:#e6db74"&gt;&amp;#39;queriesLog&amp;#39;&lt;/span&gt;]
]);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;But you are not limited, if you need to configure it to a PSR-3 logger like &lt;a href="http://packagist.org/packages/monolog/monolog"&gt;monolog/monolog&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Cake\Log\Log&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Monolog\Logger&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Monolog\Handler\StreamHandler&lt;/span&gt;;

&lt;span style="color:#a6e22e"&gt;Log&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;config&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;default&amp;#39;&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; () {
    $log &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Logger&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;cli&amp;#39;&lt;/span&gt;);
    $log&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;pushHandler&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;StreamHandler&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;php://stdout&amp;#39;&lt;/span&gt;));
    &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; $log;
});
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That was pretty simple and it logs to cli.&lt;/p&gt;
&lt;p&gt;Thank you &lt;a href="https://github.com/lorenzo"&gt;José Lorenzo Rodríguez&lt;/a&gt; for providing the necessary information.&lt;/p&gt;
&lt;p&gt;How about logging the queries to a debugbar?&lt;/p&gt;
&lt;p&gt;Install &lt;a href="https://github.com/fabfuel/prophiler/"&gt;fabfuel/prophiler&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-json" data-lang="json"&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;c&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;o&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;m&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;p&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;o&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;s&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;e&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;r&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;r&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;e&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;q&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;u&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;i&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;r&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;e&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;f&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;a&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;b&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;f&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;u&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;e&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;l&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;/&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;p&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;r&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;o&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;p&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;h&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;i&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;l&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;e&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;r&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="configuring-debugbar"&gt;Configuring debugbar&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Cake\Log\Log&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Fabfuel\Prophiler\Profiler&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Fabfuel\Prophiler\Toolbar&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Fabfuel\Prophiler\DataCollector\Request&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Fabfuel\Prophiler\Adapter\Psr\Log\Logger&lt;/span&gt;;

$profiler &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Profiler&lt;/span&gt;();
$toolbar &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Toolbar&lt;/span&gt;($profiler);
&lt;span style="color:#75715e"&gt;// add your data collectors
&lt;/span&gt;&lt;span style="color:#75715e"&gt;// $toolbar-&amp;gt;addDataCollector(new Request());
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;
&lt;span style="color:#a6e22e"&gt;Log&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;config&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;db&amp;#39;&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; () &lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; ($profiler) {
	$log &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Logger&lt;/span&gt;($profiler);
	&lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; $log;
});
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Using a PSR-7 framework like zend-expressive,  &lt;a href="https://github.com/bitExpert/prophiler-psr7-middleware"&gt;bitExpert/prophiler-psr7-middleware&lt;/a&gt; is your friend.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>cakephp orm and illuminate pagination</title>
      <link>https://harikt.com/blog/2016/01/13/cakephp-orm-and-illuminate-pagination/</link>
      <pubDate>Wed, 13 Jan 2016 00:00:00 +0000</pubDate>
      <guid>https://harikt.com/blog/2016/01/13/cakephp-orm-and-illuminate-pagination/</guid>
      <description>&lt;p&gt;Do you know CakePHP version 3 has a lovely ORM which can be used as standalone?&lt;/p&gt;
&lt;p&gt;Thank you &lt;a href="https://github.com/lorenzo"&gt;José Lorenzo Rodríguez&lt;/a&gt; and every contributor, for your hard work.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;composer require cakephp/orm
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;That's it.&lt;/p&gt;
&lt;p&gt;Working on I noticed I need to do some pagination. Oh, remember we have &lt;code&gt;illuminate/pagination&lt;/code&gt;. Why not use it?&lt;/p&gt;
&lt;p&gt;Problem, there seems no one have implemented it. How could we achieve it?
Lets do it.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;composer require illuminate/pagination
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;If you are using a psr-7 request / response here is the middleware for you.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Psr\Http\Message\ResponseInterface&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Psr\Http\Message\ServerRequestInterface&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Illuminate\Pagination\Paginator&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;IlluminatePaginator&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;PaginatorMiddleware&lt;/span&gt;
{
    &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; __invoke( &lt;span style="color:#a6e22e"&gt;ServerRequestInterface&lt;/span&gt; $request, &lt;span style="color:#a6e22e"&gt;ResponseInterface&lt;/span&gt; $response, &lt;span style="color:#a6e22e"&gt;callable&lt;/span&gt; $next &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;null&lt;/span&gt; )
    {
        &lt;span style="color:#a6e22e"&gt;IlluminatePaginator&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;currentPageResolver&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; ( $pageName &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;page&amp;#39;&lt;/span&gt; ) &lt;span style="color:#66d9ef"&gt;use&lt;/span&gt;($request )
        {
            $params &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $request&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getQueryParams&lt;/span&gt;();
            &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;empty&lt;/span&gt;($params[$pageName]) &lt;span style="color:#f92672"&gt;?&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &lt;span style="color:#f92672"&gt;:&lt;/span&gt; $params[$pageName];
        });

        &lt;span style="color:#a6e22e"&gt;IlluminatePaginator&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;currentPathResolver&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; () &lt;span style="color:#66d9ef"&gt;use&lt;/span&gt;($request )
        {
            &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; $request&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getUri&lt;/span&gt;()&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getPath&lt;/span&gt;();
        });

        &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; $next($request, $response);
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;What we did above are a few things for Illuminate to give the url path when
it is doing the pagination. So for example &lt;code&gt;/article?page=&amp;lt;page-number&amp;gt;&lt;/code&gt; will come
instead of just &lt;code&gt;?page=&amp;lt;page-number&amp;gt;&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Cake\ORM\TableRegistry&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Illuminate\Pagination\Paginator&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Illuminate\Pagination\LengthAwarePaginator&lt;/span&gt;;

$table &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;TableRegistry&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;get&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;Articles&amp;#39;&lt;/span&gt;);
$currentPage &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;;
$perPage &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;20&lt;/span&gt;;
$query &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $table&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;find&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;all&amp;#39;&lt;/span&gt;);
$total &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $query&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;count&lt;/span&gt;();
$items &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $query&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;page&lt;/span&gt;($currentPage, $perPage);
$paginator &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;LengthAwarePaginator&lt;/span&gt;($items, $total, $perPage, $currentPage, [
	&lt;span style="color:#e6db74"&gt;&amp;#39;path&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Paginator&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;resolveCurrentPath&lt;/span&gt;(),
]);
&lt;span style="color:#66d9ef"&gt;echo&lt;/span&gt; $paginator&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;render&lt;/span&gt;();
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The above code is querying the articles and rendering the pagination with the returned results.&lt;/p&gt;
&lt;p&gt;By default the Presenter is &lt;code&gt;Illuminate\Pagination\BootstrapThreePresenter&lt;/code&gt;, but you
can create your own.&lt;/p&gt;
&lt;p&gt;I hope you will love the integration.&lt;/p&gt;
&lt;p&gt;Thank you everyone for your support and hard work on components to make PHP better every day.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>eloquent and pagination inside zend expressive</title>
      <link>https://harikt.com/blog/2015/11/13/eloquent-and-pagination-inside-zend-expressive/</link>
      <pubDate>Fri, 13 Nov 2015 00:00:00 +0000</pubDate>
      <guid>https://harikt.com/blog/2015/11/13/eloquent-and-pagination-inside-zend-expressive/</guid>
      <description>&lt;p&gt;Recently working with eloquent (Laravel's orm), zend expressive and zend view,
I wanted to integrate pagination.&lt;/p&gt;
&lt;p&gt;It was simple as registering a &lt;code&gt;Paginator&lt;/code&gt; middleware.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Illuminate\Pagination\Paginator&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Psr\Http\Message\ResponseInterface&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Psr\Http\Message\ServerRequestInterface&lt;/span&gt;;

&lt;span style="color:#a6e22e"&gt;IlluminatePaginator&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;currentPageResolver&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; ($pageName) &lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; ($request) {
    $params &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $request&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getQueryParams&lt;/span&gt;();
    &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;empty&lt;/span&gt;($params[$pageName]) &lt;span style="color:#f92672"&gt;?&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt; &lt;span style="color:#f92672"&gt;:&lt;/span&gt; $params[$pageName];
});
&lt;span style="color:#a6e22e"&gt;IlluminatePaginator&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;currentPathResolver&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; () &lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; ($request) {
    &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; $request&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getUri&lt;/span&gt;()&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getPath&lt;/span&gt;();
});
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and you can call paginate on the &lt;code&gt;Model&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Eg : Consider you have a &lt;code&gt;Post&lt;/code&gt; model.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
$posts &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Post&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;paginate&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;20&lt;/span&gt;);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and in view you can iterate through the &lt;code&gt;$posts&lt;/code&gt; and render the pagination.
The &lt;code&gt;$posts&lt;/code&gt; is an object of &lt;a href="http://laravel.com/api/5.0/Illuminate/Pagination/LengthAwarePaginator.html"&gt;LengthAwarePaginator&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You can also modify the presenter accordingly. Default comes with  &lt;a href="http://laravel.com/api/5.0/Illuminate/Pagination/BootstrapThreePresenter.html"&gt;BootstrapThreePresenter&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;foreach&lt;/span&gt; ($this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;posts&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; $post) {
&lt;span style="color:#75715e"&gt;?&amp;gt;&lt;/span&gt;
    &lt;span style="color:#75715e"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt; $post&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;title&lt;/span&gt; &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;&amp;lt;br /&amp;gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#75715e"&gt;?&amp;gt;&lt;/span&gt;
&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
}
&lt;span style="color:#75715e"&gt;?&amp;gt;&lt;/span&gt;
&lt;span style="color:#75715e"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt; $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;posts&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;render&lt;/span&gt;() &lt;span style="color:#75715e"&gt;?&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;Note : Please be aware of the &lt;a href="https://github.com/laravel/framework/issues/10909"&gt;issues/10909&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;
</description>
    </item>
    
    <item>
      <title>integrating zend form in zend expressive and view</title>
      <link>https://harikt.com/blog/2015/11/13/integrating-zend-form-in-zend-expressive-and-view/</link>
      <pubDate>Fri, 13 Nov 2015 00:00:00 +0000</pubDate>
      <guid>https://harikt.com/blog/2015/11/13/integrating-zend-form-in-zend-expressive-and-view/</guid>
      <description>&lt;p&gt;Example is based using &lt;a href="https://github.com/auraphp/Aura.Di"&gt;Aura.Di&lt;/a&gt;.
But the functionality will be same for any containers.
First register the service &lt;code&gt;Zend\View\HelperPluginManager&lt;/code&gt;, so that we
can access the same object.&lt;/p&gt;
&lt;p&gt;To register the form helpers, create the object of &lt;code&gt;Zend\Form\View\HelperConfig&lt;/code&gt;
and pass the &lt;code&gt;Zend\View\HelperPluginManager&lt;/code&gt; service.&lt;/p&gt;
&lt;p&gt;Example code with &lt;a href="https://github.com/auraphp/Aura.Di"&gt;Aura.Di&lt;/a&gt; version 3 configuration.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Aura\Di\ContainerConfig&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Aura\Di\Container&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Zend\Form\View\HelperConfig&lt;/span&gt;;

&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ViewHelper&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;extends&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ContainerConfig&lt;/span&gt;
{
    &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;define&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;Container&lt;/span&gt; $di)
    {
        $di&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;set&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;Zend\View\HelperPluginManager&amp;#39;&lt;/span&gt;, $di&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;lazyNew&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;Zend\View\HelperPluginManager&amp;#39;&lt;/span&gt;));
    }

    &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;modify&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;Container&lt;/span&gt; $di)
    {
        $serviceManager &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $di&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;get&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;Zend\View\HelperPluginManager&amp;#39;&lt;/span&gt;);
        $helper &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;HelperConfig&lt;/span&gt;();
        $helper&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;configureServiceManager&lt;/span&gt;($servicemanager);
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="creating-your-own-zendview-helper"&gt;Creating your own zend-view helper&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Create your helper class&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;namespace&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;App\View\Helper&lt;/span&gt;;

&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Zend\View\Helper\AbstractHelper&lt;/span&gt;;

&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;HasError&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;extends&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;AbstractHelper&lt;/span&gt;
{
    &lt;span style="color:#75715e"&gt;// add as many parameters you want to pass from the view
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;    &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; __invoke()
    {
        &lt;span style="color:#75715e"&gt;// some code
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ol start="2"&gt;
&lt;li&gt;Registering your helper class.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;First get the &lt;code&gt;Zend\View\HelperPluginManager&lt;/code&gt; service.&lt;/p&gt;
&lt;p&gt;2.a ) Registering as a factory&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
$serviceManager&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setFactory&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;hasError&amp;#39;&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; () {
    &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;\App\View\Helper\HasError&lt;/span&gt;();
});
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;2.b ) As an invokable&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
$serviceManager&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setInvokableClass&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;hasError&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;App\View\Helper\HasError&amp;#39;&lt;/span&gt;);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now you can access inside zend-view as &lt;code&gt;$this-&amp;gt;hasError()&lt;/code&gt;. If your view
helper need dependencies don't use the &lt;code&gt;setInvokableClass&lt;/code&gt; method.
Use factory and get the object from the container.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
$serviceManager&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setFactory&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;hasError&amp;#39;&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; () &lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; ($di) {
     &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; $di&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;get&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;App\View\Helper\HasError&amp;#39;&lt;/span&gt;);
});
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;I wished if &lt;code&gt;$serviceManager&lt;/code&gt; can understand the aura's &lt;code&gt;lazyNew&lt;/code&gt; functionality
so that we don't need to register it as a service.&lt;/p&gt;
&lt;p&gt;Eg : Below will not work.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
$serviceManager&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setFactory&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;hasError&amp;#39;&lt;/span&gt;, $di&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;lazyNew&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;App\View\Helper\HasError&amp;#39;&lt;/span&gt;));
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is what I love to see it working for this a closure, but with namespaced.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>custom events in symfony2 bundle</title>
      <link>https://harikt.com/blog/2015/10/11/custom-events-in-symfony2-bundle/</link>
      <pubDate>Sun, 11 Oct 2015 00:00:00 +0000</pubDate>
      <guid>https://harikt.com/blog/2015/10/11/custom-events-in-symfony2-bundle/</guid>
      <description>&lt;p&gt;In this tutorial we will create a custom event for symfony2 bundle.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Assuming you have downloaded the symfony-standard distribution to play.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Create &lt;code&gt;HktEventBundle&lt;/code&gt; via &lt;a href="http://symfony.com/doc/current/bundles/SensioGeneratorBundle/index.html"&gt;sensio generator bundle&lt;/a&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#a6e22e"&gt;php&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;app&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;console&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;generate&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;bundle&lt;/span&gt; &lt;span style="color:#f92672"&gt;--&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;namespace&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;Hkt&lt;/span&gt;&lt;span style="color:#f92672"&gt;/&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;EventBundle&lt;/span&gt; &lt;span style="color:#f92672"&gt;--&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;dir&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;src&lt;/span&gt; &lt;span style="color:#f92672"&gt;--&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;no&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;interaction&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Create the event class.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#75715e"&gt;// src/Hkt/EventBundle/Event/PageViewed.php
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;namespace&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Hkt\EventBundle\Event&lt;/span&gt;;

&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Symfony\Component\EventDispatcher\Event&lt;/span&gt;;

&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;PageViewed&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;extends&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Event&lt;/span&gt;
{
    &lt;span style="color:#66d9ef"&gt;protected&lt;/span&gt; $name;

    &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; __construct($name)
    {
        $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;name&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $name;
    }

    &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;getName&lt;/span&gt;()
    {
        &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;name&lt;/span&gt;;
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Add as many methods/properties which are needed from the listener. Instead of
creating an event class we can make use of &lt;a href="http://symfony.com/doc/current/components/event_dispatcher/generic_event.html"&gt;generic event&lt;/a&gt; also.&lt;/p&gt;
&lt;h2 id="dispatching-event"&gt;Dispatching Event&lt;/h2&gt;
&lt;pre&gt;&lt;code&gt;&amp;lt;?php
//src/Hkt/EventBundle/Controller/DefaultController.php
namespace Hkt\EventBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Template;
use Hkt\EventBundle\Event\PageViewed;

class DefaultController extends Controller
{
    /**
     * @Route(&amp;quot;/hello/{name}&amp;quot;)
     * @Template()
     */
    public function indexAction($name)
    {
        $event = new PageViewed($name);
        $this-&amp;gt;get('event_dispatcher')-&amp;gt;dispatch('hkt.event.page_viewed', $event);
        return array('name' =&amp;gt; $name);
    }
} 
&lt;/code&gt;&lt;/pre&gt;&lt;h2 id="listener"&gt;Listener&lt;/h2&gt;
&lt;p&gt;Create the listener to do what you want to do with the dispatched/triggered event.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#f92672"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;php&lt;/span&gt;
&lt;span style="color:#75715e"&gt;// src/Hkt/EventBundle/EventListener/PageViewedListener.php
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;namespace&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Hkt\EventBundle\EventListener&lt;/span&gt;;

&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Symfony\Component\EventDispatcher\EventSubscriberInterface&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Hkt\EventBundle\Event\PageViewed&lt;/span&gt;;

&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;PageViewedListener&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;implements&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;EventSubscriberInterface&lt;/span&gt;
{
    &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;static&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;getSubscribedEvents&lt;/span&gt;()
    {
        &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;array&lt;/span&gt;(
            &lt;span style="color:#e6db74"&gt;&amp;#39;hkt.event.page_viewed&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;handler&amp;#39;&lt;/span&gt;,
        );
    }

    &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;handler&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;PageViewed&lt;/span&gt; $event)
    {
        &lt;span style="color:#75715e"&gt;// $event-&amp;gt;getName();
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;        &lt;span style="color:#75715e"&gt;// do what you want with the event
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;In order to get the &lt;code&gt;PageViewedListener&lt;/code&gt; to be called, we need to register the listener to the &lt;code&gt;event_dispatcher&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Add the below lines in &lt;code&gt;services.yml&lt;/code&gt; or &lt;code&gt;services.xml&lt;/code&gt; accordingly.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-yml" data-lang="yml"&gt;&lt;span style="color:#75715e"&gt;# src/Hkt/EventBundle/Resources/config/services.yml&lt;/span&gt;
hkt.event.page_viewed:
    class: Hkt\EventBundle\EventListener\PageViewedListener
Tags = [&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>20 years of php</title>
      <link>https://harikt.com/blog/2015/06/17/20-years-of-php/</link>
      <pubDate>Wed, 17 Jun 2015 00:00:00 +0000</pubDate>
      <guid>https://harikt.com/blog/2015/06/17/20-years-of-php/</guid>
      <description>&lt;p&gt;First my apologies being late! I hope you all know PHP is celebrating its
20th years of existence in the web.&lt;/p&gt;
&lt;p&gt;There is something that makes PHP unique that helps to standout with
other languages.&lt;/p&gt;
&lt;p&gt;In this opporchunity I would like to thank the creator, the contributors,
the maintainers, and all the users (past/present) to make this
memorable.&lt;/p&gt;
&lt;h2 id="my-story"&gt;My Story&lt;/h2&gt;
&lt;p&gt;I got an exposure to learn and use internet in my college days.
In those period I look html as a very complex language.
I wasn’t aware there exists editors which help you.&lt;/p&gt;
&lt;p&gt;Around 2006, iirc Ganesh sir was the one who introduced me to PHP, and then with
the guidance and help of Jose Antony.&lt;/p&gt;
&lt;p&gt;College life ended in 2007. The search begins to find a job, and I managed to get one.&lt;/p&gt;
&lt;p&gt;In 2009, I wrote a blog post &lt;a href="http://phpdeveloper.org/news/13242"&gt;A simple Blog using Zend framework 1.9&lt;/a&gt; which got lots of attraction.&lt;/p&gt;
&lt;p&gt;I wasn't aware &lt;a href="http://phpdeveloper.org/"&gt;phpdeveloper.org&lt;/a&gt; and &lt;a href="http://devzone.zend.com/"&gt;devzone.zend.com&lt;/a&gt; was changing my life and getting more closer to the people in the PHP community.&lt;/p&gt;
&lt;p&gt;Some &lt;a href="https://web.archive.org/web/20120118060053/http://devzone.zend.com/1554/a-simple-blog-with-zend-framework-19/#comment-1039"&gt;people praised, some disagreed&lt;/a&gt; which I came across a tool called &lt;a href="https://phpunit.de/"&gt;phpunit&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;In 2010, I attended my first conference osidays and met some of the awesome
people like David Coallier, Fabien Potencier, Jacob Vrana, Dave Hall and many more.&lt;/p&gt;
&lt;h2 id="into-the-world-of-opensource"&gt;Into the world of open-source&lt;/h2&gt;
&lt;p&gt;I would like to thank &lt;a href="http://paul-m-jones.com"&gt;Paul M Jones&lt;/a&gt; the man behind &lt;a href="http://auraphp.com"&gt;auraphp.com&lt;/a&gt; for all the help, support and mentoring.&lt;/p&gt;
&lt;p&gt;Started with stupid questions, and slowly as a small contributor.&lt;/p&gt;
&lt;p&gt;Contributing to open-source gave me some confidence and it opened some help
from the community.&lt;/p&gt;
&lt;p&gt;Thank you &lt;a href="https://beau.io/"&gt;Beau D Simensen&lt;/a&gt;, &lt;a href="http://blog.calevans.com/"&gt;CalEvans&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Start a habit of learning, you will not regret joining &lt;a href="http://nomadphp.com"&gt;NomadPHP&lt;/a&gt; it is awesome!.&lt;/p&gt;
&lt;p&gt;Thank you all, and thanks for all the help and support you guys are showing.&lt;/p&gt;
&lt;p&gt;Happy PhPing!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>zend feed and guzzle</title>
      <link>https://harikt.com/blog/2015/04/01/zend-feed-and-guzzle/</link>
      <pubDate>Wed, 01 Apr 2015 00:00:00 +0000</pubDate>
      <guid>https://harikt.com/blog/2015/04/01/zend-feed-and-guzzle/</guid>
      <description>&lt;p&gt;You may have worked with Zend Feed as a standalone component.
I don't know whether you have integrated Zend framework Feed with Guzzle
as Http Client.&lt;/p&gt;
&lt;p&gt;This post is inspired by &lt;a href="http://mwop.net"&gt;Matthew Weier O'Phinney&lt;/a&gt;,
who have mentioned the same on github.&lt;/p&gt;
&lt;p&gt;Our &lt;code&gt;composer.json&lt;/code&gt; looks&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-json" data-lang="json"&gt;{
    &lt;span style="color:#f92672"&gt;&amp;#34;require&amp;#34;&lt;/span&gt;: {
        &lt;span style="color:#f92672"&gt;&amp;#34;guzzlehttp/guzzle&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;~5.2&amp;#34;&lt;/span&gt;,
        &lt;span style="color:#f92672"&gt;&amp;#34;zendframework/zend-feed&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;~2.3&amp;#34;&lt;/span&gt;,
        &lt;span style="color:#f92672"&gt;&amp;#34;zendframework/zend-servicemanager&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;~2.3&amp;#34;&lt;/span&gt;
    },
    &lt;span style="color:#f92672"&gt;&amp;#34;autoload&amp;#34;&lt;/span&gt;: {
        &lt;span style="color:#f92672"&gt;&amp;#34;psr-0&amp;#34;&lt;/span&gt;: {
            &lt;span style="color:#f92672"&gt;&amp;#34;&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;src/&amp;#34;&lt;/span&gt;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;code&gt;Zen\Feed\Reader\Reader&lt;/code&gt; have a method &lt;code&gt;importRemoteFeed&lt;/code&gt; which accepts
an instance of &lt;code&gt;Zend\Feed\Reader\Http\ClientInterface&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;The &lt;code&gt;Zend\Feed\Reader\Http\ClientInterface&lt;/code&gt; have only one method &lt;code&gt;get&lt;/code&gt;
which returns &lt;code&gt;Zend\Feed\Reader\Http\ResponseInterface&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;So any http client that satisfy the interface will work. Let's create
them.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#75715e"&gt;// src/GuzzleClient.php
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;GuzzleHttp\Client&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Zend\Feed\Reader\Http\ClientInterface&lt;/span&gt;;

&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;GuzzleClient&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;implements&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ClientInterface&lt;/span&gt;
{
    &lt;span style="color:#66d9ef"&gt;protected&lt;/span&gt; $guzzle;

    &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; __construct(&lt;span style="color:#a6e22e"&gt;Client&lt;/span&gt; $guzzle)
    {
        $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;guzzle&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $guzzle;
    }

    &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;get&lt;/span&gt;($uri)
    {
        $response  &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;guzzle&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;get&lt;/span&gt;($uri);
        &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;GuzzleResponse&lt;/span&gt;($response);
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#75715e"&gt;// src/GuzzleResponse.php
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;GuzzleHttp\Client&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;GuzzleHttp\Message\Response&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Zend\Feed\Reader\Http\ClientInterface&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Zend\Feed\Reader\Http\ResponseInterface&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Zend\Feed\Reader\Reader&lt;/span&gt;;

&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;GuzzleResponse&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;implements&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ResponseInterface&lt;/span&gt;
{
    &lt;span style="color:#66d9ef"&gt;protected&lt;/span&gt; $response;

    &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; __construct(&lt;span style="color:#a6e22e"&gt;Response&lt;/span&gt; $response)
    {
        $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;response&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $response;
    }

    &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;getStatusCode&lt;/span&gt;()
    {
        &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;response&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getStatusCode&lt;/span&gt;();
    }

    &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;getBody&lt;/span&gt;()
    {
        &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;string&lt;/span&gt;) $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;response&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getBody&lt;/span&gt;();
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Wiring up,&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;require&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;__DIR__&lt;/span&gt; &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;/vendor/autoload.php&amp;#39;&lt;/span&gt;;

&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;GuzzleHttp\Client&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Zend\Feed\Reader\Reader&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;FeedReader&lt;/span&gt;;

$client &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;GuzzleClient&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Client&lt;/span&gt;());
$feed &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;FeedReader&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;importRemoteFeed&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;http://feeds.feedburner.com/harikt/YKAJ&amp;#39;&lt;/span&gt;, $client);

&lt;span style="color:#66d9ef"&gt;echo&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;The feed contains &amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;.&lt;/span&gt; $feed&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;count&lt;/span&gt;() &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39; entries.&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\n\n&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;foreach&lt;/span&gt; ($feed &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; $entry) {
    &lt;span style="color:#66d9ef"&gt;echo&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;Title: &amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;.&lt;/span&gt; $entry&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getTitle&lt;/span&gt;() &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\n&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;;
    &lt;span style="color:#75715e"&gt;// echo &amp;#39;Description: &amp;#39; . $entry-&amp;gt;getDescription() . &amp;#34;\n&amp;#34;;
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;    &lt;span style="color:#66d9ef"&gt;echo&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;URL: &amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;.&lt;/span&gt; $entry&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getLink&lt;/span&gt;() &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\n\n&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can run from the command line.&lt;/p&gt;
&lt;p&gt;Once &lt;a href="https://github.com/php-fig/fig-standards/blob/master/proposed/http-message.md"&gt;PSR-7&lt;/a&gt;
is accepted, and if both guzzle and zend framework (zf3) is
built on top of it, we may not need to do the same.&lt;/p&gt;
&lt;p&gt;Happy PhPing.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>conduit middleware for php</title>
      <link>https://harikt.com/blog/2015/01/21/conduit-middleware-for-php/</link>
      <pubDate>Wed, 21 Jan 2015 00:00:00 +0000</pubDate>
      <guid>https://harikt.com/blog/2015/01/21/conduit-middleware-for-php/</guid>
      <description>&lt;p&gt;Long back, I happened to talk with &lt;a href="https://beau.io/"&gt;Beau Simensen&lt;/a&gt; about &lt;a href="http://stackphp.com/"&gt;stackphp&lt;/a&gt; on #auraphp channel. It was hard for me to digest when I noticed it need &lt;code&gt;symfony/http-kernel&lt;/code&gt; and its dependencies.&lt;/p&gt;
&lt;p&gt;After a few months, I started to like the middleware approach of slim framework and wanted to push it to aura. But nothing happened  there.&lt;/p&gt;
&lt;h2 id="conduit-to-rescue"&gt;Conduit to rescue&lt;/h2&gt;
&lt;p&gt;Conduit is a Middleware for PHP built by &lt;a href="http://mwop.net/"&gt;Matthew Weier O'Phinney&lt;/a&gt; lead of Zend framework. Conduit supports the current &lt;a href="https://github.com/php-fig/fig-standards/blob/master/proposed/http-message.md"&gt;PSR-7 proposal&lt;/a&gt;. I believe like the many PSR's, PSR-7 will be a revolution in the PHP world. Conduit is really a micro framework and can grow with your project.&lt;/p&gt;
&lt;h2 id="starting-your-project"&gt;Starting your project&lt;/h2&gt;
&lt;p&gt;I hope you know about the tool &lt;a href="https://getcomposer.org"&gt;composer&lt;/a&gt; and know about PHP 5.3 to follow the tutorial.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;mkdir sample-project
cd sample-project
composer require &amp;quot;phly/conduit:0.10.*&amp;quot;
mkdir web
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We have created an extra &lt;code&gt;web&lt;/code&gt; folder, so it acts as the document root. Create an &lt;code&gt;index.php&lt;/code&gt; file in the &lt;code&gt;web&lt;/code&gt; folder and lets start serving our first &lt;code&gt;Hello conduit!&lt;/code&gt; message.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;require&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;dirname&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;__DIR__&lt;/span&gt;) &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;/vendor/autoload.php&amp;#39;&lt;/span&gt;;

&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Phly\Conduit\Middleware&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Phly\Http\Server&lt;/span&gt;;

$app &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Middleware&lt;/span&gt;();
$app&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;pipe&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;/&amp;#39;&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; ($request, $response, $next) {
    &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; $response&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;write&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;Hello conduit!&amp;#39;&lt;/span&gt;)&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;end&lt;/span&gt;();
});
$server &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Server&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;createServer&lt;/span&gt;($app,
  $_SERVER,
  $_GET,
  $_POST,
  $_COOKIE,
  $_FILES
);
$server&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;listen&lt;/span&gt;();
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Start your web server, or fire your built in PHP server.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-bash" data-lang="bash"&gt;php -S localhost:8000 web/index.php -t web
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Point your browser to &lt;code&gt;http://localhost:8000&lt;/code&gt; and you can see &lt;code&gt;Hello conduit!&lt;/code&gt;.&lt;/p&gt;
&lt;h2 id="middlewares"&gt;Middlewares&lt;/h2&gt;
&lt;p&gt;Conduit route is very limited and will not handle dynamic routing. So we need a router middleware to resuce. Let us build our first router middleware. If you check the &lt;a href="https://github.com/phly/conduit/blob/0.10.0/README.md#creating-middleware"&gt;docs&lt;/a&gt; middleware can be a closure, invokable objects, array callback etc. We will stick with &lt;code&gt;closure&lt;/code&gt; in the examples.&lt;/p&gt;
&lt;p&gt;The idea is same even if you are using a different library.&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Get the path via &lt;code&gt;$request-&amp;gt;getUri()-&amp;gt;getPath()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Check router if the path is matching&lt;/li&gt;
&lt;li&gt;If
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;no&lt;/code&gt; call the next middleware in stack. ie &lt;code&gt;return $next()&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;yes&lt;/code&gt; execute the controller and return back the response&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;blockquote&gt;
&lt;p&gt;Be sure that if you change something you need to return the response. Because Request and Response are immutable.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;In-order to build something like the above, we need a &lt;a href="https://github.com/auraphp/Aura.Router"&gt;router library&lt;/a&gt; which can handle routing, and a &lt;a href="https://github.com/auraphp/Aura.Dispatcher"&gt;dispatcher library&lt;/a&gt; which can handle the necessary operation when a route is found.&lt;/p&gt;
&lt;p&gt;Install the dependencies.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-bash" data-lang="bash"&gt;composer require &lt;span style="color:#e6db74"&gt;&amp;#34;aura/router:~2.0&amp;#34;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;aura/dispatcher:~2.0&amp;#34;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The router middleware will look like as below.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
$router &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;\Aura\Router\Router&lt;/span&gt;(
    &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;\Aura\Router\RouteCollection&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;\Aura\Router\RouteFactory&lt;/span&gt;),
    &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;\Aura\Router\Generator&lt;/span&gt;
);
$dispatcher &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;\Aura\Dispatcher\Dispatcher&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;array&lt;/span&gt;(), &lt;span style="color:#e6db74"&gt;&amp;#39;controller&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;action&amp;#39;&lt;/span&gt;);

$app&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;pipe&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; ($request, $response, $next) &lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; ($router, $dispatcher) {
    $path &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $request&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getUri&lt;/span&gt;()&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getPath&lt;/span&gt;();
    $route &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $router&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;match&lt;/span&gt;($path, $request&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getServerParams&lt;/span&gt;());
    &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#f92672"&gt;!&lt;/span&gt; $route) {
        &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; $next();
    }
    $params &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $route&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;params&lt;/span&gt;;
    $params[&lt;span style="color:#e6db74"&gt;&amp;#39;request&amp;#39;&lt;/span&gt;] &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $request;
    $params[&lt;span style="color:#e6db74"&gt;&amp;#39;response&amp;#39;&lt;/span&gt;] &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $response;
    $result &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $dispatcher&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;__invoke&lt;/span&gt;($params);
    &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; ($result &lt;span style="color:#a6e22e"&gt;instanceof&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;\Psr\Http\Message\ResponseInterface&lt;/span&gt;) {
        $response &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $result;
    } &lt;span style="color:#66d9ef"&gt;else&lt;/span&gt; {
        $response &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $response&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;write&lt;/span&gt;($result)&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;end&lt;/span&gt;();
    }
    &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; $response;
});
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now your router middleware can handle dynamic things. You can see the full example over   &lt;a href="https://gist.github.com/harikt/477902c09eb51dad6433"&gt;gist&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;You may need an authentication middleware to check whether the user is authenticated, or a content negotiation middleware to set the corresponding &lt;code&gt;Content-Type&lt;/code&gt; header in the response.&lt;/p&gt;
&lt;p&gt;I have created a &lt;a href="https://github.com/harikt/conduit-skelton"&gt;skelton project&lt;/a&gt; which have a &lt;a href="https://github.com/harikt/conduit-skelton/blob/0.2.0/src/Conduit/Middleware/RouterMiddleware.php"&gt;router middleware&lt;/a&gt;, &lt;a href="https://github.com/harikt/conduit-skelton/blob/0.2.0/src/Conduit/Middleware/AuthenticationMiddleware.php"&gt;authentication middleware&lt;/a&gt; and &lt;a href="https://github.com/harikt/conduit-skelton/blob/0.2.0/src/Conduit/Middleware/NegotiationMiddleware.php"&gt;negotiation middleware&lt;/a&gt; with the help of a few libraries. Less libraray means less code to maintain, easy to understand and debug the code behind the scenes.&lt;/p&gt;
&lt;p&gt;Today, I noticed one question over reddit &lt;code&gt;Moving to a real framework.. need help with the migration&lt;/code&gt; wrote my &lt;a href="http://www.reddit.com/r/PHP/comments/2t4970/moving_to_a_real_framework_need_help_with_the/cnvml5m"&gt;suggestion&lt;/a&gt; how conduit + aura can help.&lt;/p&gt;
&lt;p&gt;Play and enjoy!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>experimenting on different framework</title>
      <link>https://harikt.com/blog/2015/01/13/experimenting-on-different-framework/</link>
      <pubDate>Tue, 13 Jan 2015 00:00:00 +0000</pubDate>
      <guid>https://harikt.com/blog/2015/01/13/experimenting-on-different-framework/</guid>
      <description>&lt;p&gt;Whenever I get some time, I try to learn and experiment on different frameworks. I would like to stay away from pin pointing to the frameworks I have looked, so they don't feel bad.&lt;/p&gt;
&lt;h2 id="long-live-components"&gt;Long live components&lt;/h2&gt;
&lt;p&gt;Components are awesome!. You can plug your favourite components to any system. Thank you composer.
One strong preference choosing a framework was&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;It should be built from components&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="advantage"&gt;Advantage&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;I could use those components on a different project without spending long time learning a different API.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id="choosing-symfony-as-a-framework"&gt;Choosing Symfony as a framework&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Symfony framework have been used in production for long, big community, and backed by Sensio Labs.&lt;/li&gt;
&lt;li&gt;Many of the libraries, cms and frameowrks that exists on packagist rely on symfony components.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Look at &lt;a href="http://phinx.org"&gt;phinx&lt;/a&gt; a db migration tool, &lt;a href="https://drupal.org"&gt;drupal 8&lt;/a&gt; etc. These makes use of components like &lt;code&gt;symfony/console&lt;/code&gt;, &lt;code&gt;symfony/http-foundation&lt;/code&gt;, &lt;code&gt;symfony/router&lt;/code&gt; etc.&lt;/p&gt;
&lt;p&gt;Some of the good things I like in symfony console component are its &lt;a href="http://symfony.com/doc/current/components/console/helpers/index.html"&gt;helpers&lt;/a&gt;.&lt;/p&gt;
&lt;h3 id="table"&gt;Table&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Symfony\Component\Console\Helper\Table&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Symfony\Component\Console\Output\ConsoleOutput&lt;/span&gt;;

$output &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ConsoleOutput&lt;/span&gt;();
$table &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Table&lt;/span&gt;($output);
$table
    &lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setHeaders&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;array&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;ISBN&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;Title&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;Author&amp;#39;&lt;/span&gt;))
    &lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setRows&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;array&lt;/span&gt;(
        &lt;span style="color:#66d9ef"&gt;array&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;99921-58-10-7&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;Divine Comedy&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;Dante Alighieri&amp;#39;&lt;/span&gt;),
        &lt;span style="color:#66d9ef"&gt;array&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;9971-5-0210-0&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;A Tale of Two Cities&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;Charles Dickens&amp;#39;&lt;/span&gt;),
        &lt;span style="color:#66d9ef"&gt;array&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;960-425-059-0&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;The Lord of the Rings&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;J. R. R. Tolkien&amp;#39;&lt;/span&gt;),
        &lt;span style="color:#66d9ef"&gt;array&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;80-902734-1-6&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;And Then There Were None&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;Agatha Christie&amp;#39;&lt;/span&gt;),
    ))
;
$table&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;render&lt;/span&gt;();
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="progress-bar"&gt;Progress bar&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Symfony\Component\Console\Helper\ProgressBar&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Symfony\Component\Console\Output\ConsoleOutput&lt;/span&gt;;

$output &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ConsoleOutput&lt;/span&gt;();

&lt;span style="color:#75715e"&gt;// create a new progress bar (50 units)
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;$progress &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ProgressBar&lt;/span&gt;($output, &lt;span style="color:#ae81ff"&gt;50&lt;/span&gt;);

&lt;span style="color:#75715e"&gt;// start and displays the progress bar
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;$progress&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;start&lt;/span&gt;();

$i &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;while&lt;/span&gt; ($i&lt;span style="color:#f92672"&gt;++&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;50&lt;/span&gt;) {
    &lt;span style="color:#75715e"&gt;// ... do some work
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;
    &lt;span style="color:#75715e"&gt;// advance the progress bar 1 unit
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;    $progress&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;advance&lt;/span&gt;();

    &lt;span style="color:#75715e"&gt;// you can also advance the progress bar by more than 1 unit
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;    &lt;span style="color:#75715e"&gt;// $progress-&amp;gt;advance(3);
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;}

&lt;span style="color:#75715e"&gt;// ensure that the progress bar is at 100%
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;$progress&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;finish&lt;/span&gt;();
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="question"&gt;Question&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Symfony\Component\Console\Helper\QuestionHelper&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Symfony\Component\Console\Output\ConsoleOutput&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Symfony\Component\Console\Input\StringInput&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Symfony\Component\Console\Question\ConfirmationQuestion&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Symfony\Component\Console\Question\ChoiceQuestion&lt;/span&gt;;

$output &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ConsoleOutput&lt;/span&gt;();
$helper &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;QuestionHelper&lt;/span&gt;();
$input &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;StringInput&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;action&amp;#39;&lt;/span&gt;);
$question &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ConfirmationQuestion&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;Continue with this action?&amp;#39;&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;false&lt;/span&gt;);

&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; ($helper&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;ask&lt;/span&gt;($input, $output, $question)) {
    $question &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ChoiceQuestion&lt;/span&gt;(
        &lt;span style="color:#e6db74"&gt;&amp;#39;Please select your favorite color (defaults to red)&amp;#39;&lt;/span&gt;,
        &lt;span style="color:#66d9ef"&gt;array&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;red&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;blue&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;yellow&amp;#39;&lt;/span&gt;),
        &lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;
    );
    $question&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setErrorMessage&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;Color %s is invalid.&amp;#39;&lt;/span&gt;);

    $color &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $helper&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;ask&lt;/span&gt;($input, $output, $question);
    $output&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;writeln&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;You have just selected: &amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;$color);
} &lt;span style="color:#66d9ef"&gt;else&lt;/span&gt; {
    $output&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;writeln&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;Exiting !&amp;#39;&lt;/span&gt;);
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="hidden-passwords"&gt;Hidden Passwords&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Symfony\Component\Console\Helper\QuestionHelper&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Symfony\Component\Console\Output\ConsoleOutput&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Symfony\Component\Console\Input\StringInput&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Symfony\Component\Console\Question\Question&lt;/span&gt;;

$output &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ConsoleOutput&lt;/span&gt;();
$helper &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;QuestionHelper&lt;/span&gt;();
$input &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;StringInput&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;action&amp;#39;&lt;/span&gt;);
$question &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Question&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;What is the database password?&amp;#39;&lt;/span&gt;);
$question&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setHidden&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;);
$question&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setHiddenFallback&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;false&lt;/span&gt;);

$password &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $helper&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;ask&lt;/span&gt;($input, $output, $question);
$output&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;writeln&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;Entered password : &amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;.&lt;/span&gt; $password);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and more.. I hope you will also add &lt;code&gt;symfony/console&lt;/code&gt; into your list.&lt;/p&gt;
&lt;h2 id="http-foundation"&gt;Http Foundation&lt;/h2&gt;
&lt;p&gt;The &lt;code&gt;symfony/http-foundation&lt;/code&gt; is another extensively used component. It is actually &lt;a href="https://github.com/auraphp/Aura.Web"&gt;Aura.Web&lt;/a&gt; + &lt;a href="https://github.com/auraphp/Aura.Session"&gt;Aura.Session&lt;/a&gt; with more session handlers. Used by &lt;code&gt;drupal&lt;/code&gt;, &lt;code&gt;laravel&lt;/code&gt; etc in core. When working on mixed projects like &lt;code&gt;drupal&lt;/code&gt;, &lt;code&gt;laravel&lt;/code&gt; etc, it is good to be in your list.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Symfony\Component\HttpFoundation\Request&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Symfony\Component\HttpFoundation\Response&lt;/span&gt;;

$request &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Request&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;createFromGlobals&lt;/span&gt;();
$response &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Response&lt;/span&gt;(
    &lt;span style="color:#e6db74"&gt;&amp;#39;Hello symfony&amp;#39;&lt;/span&gt;,
    &lt;span style="color:#a6e22e"&gt;Response&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;HTTP_OK&lt;/span&gt;,
    &lt;span style="color:#66d9ef"&gt;array&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;content-type&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;text/html&amp;#39;&lt;/span&gt;)
);
$response&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;send&lt;/span&gt;();
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="finder"&gt;Finder&lt;/h2&gt;
&lt;p&gt;Another wonderful component is the finder.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Symfony\Component\Finder\Finder&lt;/span&gt;;

$finder &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Finder&lt;/span&gt;();

$iterator &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $finder
  &lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;files&lt;/span&gt;()
  &lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;depth&lt;/span&gt;(&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;)
  &lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;in&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;__DIR__&lt;/span&gt;);

&lt;span style="color:#66d9ef"&gt;foreach&lt;/span&gt; ($iterator &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; $file) {
    &lt;span style="color:#66d9ef"&gt;print&lt;/span&gt; $file&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getRealpath&lt;/span&gt;()&lt;span style="color:#f92672"&gt;.&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;\n&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="filesystem"&gt;Filesystem&lt;/h2&gt;
&lt;p&gt;Filesystem is another nice component which helps you to copy, rename, create directories.&lt;/p&gt;
&lt;h2 id="complex-components"&gt;Complex components&lt;/h2&gt;
&lt;p&gt;So far, the above components are easy to use. One of the complex component is the security component. It tries to do authentication and authorization.&lt;/p&gt;
&lt;p&gt;As a person who have worked with zend framework, I love how  &lt;a href="http://framework.zend.com/manual/current/en/modules/zend.authentication.intro.html"&gt;authentication&lt;/a&gt; and &lt;a href="http://framework.zend.com/manual/current/en/modules/zend.permissions.acl.intro.html"&gt;authorization&lt;/a&gt; is done. I do love the latest  &lt;a href="https://github.com/auraphp/Aura.Auth"&gt;Aura.Auth&lt;/a&gt; library.&lt;/p&gt;
&lt;p&gt;If you are using symfony as a framework, there is a bundle to rescue. Yes, &lt;a href="https://github.com/FriendsOfSymfony/FOSUserBundle"&gt;FOSUserBundle&lt;/a&gt;. I believe most of them who use symfony will be using it.&lt;/p&gt;
&lt;p&gt;Part of the complexity may be because symfony security was based on Spring security from Java. I am not sure why Fabien choose Spring when there were good ones in the PHP world, but I hope there is a reason behind it.&lt;/p&gt;
&lt;p&gt;Conclusion : Symfony as a framework is nice!.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>improving environment value in aura v2</title>
      <link>https://harikt.com/blog/2014/12/12/improving-environment-value-in-aura-v2/</link>
      <pubDate>Fri, 12 Dec 2014 00:00:00 +0000</pubDate>
      <guid>https://harikt.com/blog/2014/12/12/improving-environment-value-in-aura-v2/</guid>
      <description>&lt;p&gt;Aura v2 framework probably have missed a better way to handle environment variables. But that doesn't make you stall. Things can be improved ;-).&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Assume you are already using aura framework and is at root of the project.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;We are going to make use of &lt;a href="https://github.com/vlucas/phpdotenv"&gt;vlucas/phpdotenv&lt;/a&gt; , alternatives are there if you are interested to experiment.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-bash" data-lang="bash"&gt;composer require vlucas/phpdotenv
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Edit the file &lt;code&gt;config/_env.php&lt;/code&gt; and add &lt;code&gt;Dotenv::load(/path/to/.env);&lt;/code&gt; to the first line. If you have not modified anything it will look as below&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#75715e"&gt;// {PROJECT_PATH}/config/_env.php
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;Dotenv&lt;/span&gt;&lt;span style="color:#f92672"&gt;::&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;load&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;__DIR__&lt;/span&gt;);
&lt;span style="color:#75715e"&gt;// set the mode here only if it is not already set.
&lt;/span&gt;&lt;span style="color:#75715e"&gt;// this allows for setting via web server, shell script, etc.
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#f92672"&gt;!&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;isset&lt;/span&gt;($_ENV[&lt;span style="color:#e6db74"&gt;&amp;#39;AURA_CONFIG_MODE&amp;#39;&lt;/span&gt;])) {
    $_ENV[&lt;span style="color:#e6db74"&gt;&amp;#39;AURA_CONFIG_MODE&amp;#39;&lt;/span&gt;] &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;dev&amp;#39;&lt;/span&gt;;
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;Don't forget to create the &lt;code&gt;.env&lt;/code&gt; file.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;You are done!&lt;/p&gt;
&lt;p&gt;Now you can easily make use of environment variables easily from the configuration files.&lt;/p&gt;
&lt;p&gt;Below is an example.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;namespace&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Aura\Framework_Project\_Config&lt;/span&gt;;
&lt;span style="color:#75715e"&gt;// config/Common.php
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Aura\Di\Config&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Aura\Di\Container&lt;/span&gt;;

&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Common&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;extends&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Config&lt;/span&gt;
{
    &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;define&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;Container&lt;/span&gt; $di)
    {
        $di&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;params&lt;/span&gt;[&lt;span style="color:#e6db74"&gt;&amp;#39;Aura\Sql\ExtendedPdo&amp;#39;&lt;/span&gt;] &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;array&lt;/span&gt;(
            &lt;span style="color:#e6db74"&gt;&amp;#39;dsn&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;getenv&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;dsn&amp;#39;&lt;/span&gt;),
            &lt;span style="color:#e6db74"&gt;&amp;#39;username&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;getenv&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;username&amp;#39;&lt;/span&gt;),
            &lt;span style="color:#e6db74"&gt;&amp;#39;password&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;getenv&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;password&amp;#39;&lt;/span&gt;),
        );
    }

    &lt;span style="color:#75715e"&gt;// more code
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    
    <item>
      <title>speedup configuration aura v2</title>
      <link>https://harikt.com/blog/2014/12/06/speedup-configuration-aura-v2/</link>
      <pubDate>Sat, 06 Dec 2014 00:00:00 +0000</pubDate>
      <guid>https://harikt.com/blog/2014/12/06/speedup-configuration-aura-v2/</guid>
      <description>&lt;p&gt;Aura v2 added auto resolution in-order to help lazy people writing configuration manually. Even though it was introduced to help, &lt;a href="https://github.com/auraphp/Aura.Di/blob/2.1.0/README.md#auto-resolution-of-parameter-values"&gt;it introduced a few issues&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So auto resolution will be disabled in the future. Some of the complains/suggestions are how to easily write the di configuration.&lt;/p&gt;
&lt;p&gt;So introducing you &lt;a href="https://github.com/friendsofaura/FOA.DiConfig"&gt;FOA.DiConfig&lt;/a&gt;&lt;/p&gt;
&lt;h2 id="installation"&gt;Installation&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-bash" data-lang="bash"&gt;composer require foa/di-config
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="usage"&gt;Usage&lt;/h2&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-bash" data-lang="bash"&gt;vendor/bin/di-config-dump
Usage : vendor/bin/di-config-dump /real/path/to/file.php
Usage : vendor/bin/di-config-dump /real/path/to/directory
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="example-1"&gt;Example 1&lt;/h2&gt;
&lt;p&gt;Let's assume you have&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#75715e"&gt;// src/Vendor/World.php
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;namespace&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Vendor&lt;/span&gt;;

&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;World&lt;/span&gt;
{
    &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; __construct(&lt;span style="color:#a6e22e"&gt;Baz&lt;/span&gt; $baz)
    {
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#75715e"&gt;// src/Vendor/Baz.php
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;namespace&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Vendor&lt;/span&gt;;

&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Baz&lt;/span&gt;
{
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now you can make use of&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-bash" data-lang="bash"&gt;vendor/bin/di-config-dump src/Vendor/World.php
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;will output&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
$di&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;params&lt;/span&gt;[&lt;span style="color:#e6db74"&gt;&amp;#39;Vendor\World&amp;#39;&lt;/span&gt;][&lt;span style="color:#e6db74"&gt;&amp;#39;baz&amp;#39;&lt;/span&gt;] &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $di&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;lazyNew&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;Vendor\Baz&amp;#39;&lt;/span&gt;);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can also pass directory path instead of file. It will read the files and display the configuration.&lt;/p&gt;
&lt;h2 id="example-2"&gt;Example 2&lt;/h2&gt;
&lt;p&gt;Let us look into another example&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#75715e"&gt;// src/Vendor/Hello.php
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;namespace&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Vendor&lt;/span&gt;;

&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Hello&lt;/span&gt;
{
    &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; __construct(
        &lt;span style="color:#a6e22e"&gt;\Aura\Web\Response&lt;/span&gt; $response,
        &lt;span style="color:#a6e22e"&gt;\Aura\Web\Request&lt;/span&gt; $request,
        &lt;span style="color:#a6e22e"&gt;\Aura\Router\Router&lt;/span&gt; $router,
        &lt;span style="color:#a6e22e"&gt;World&lt;/span&gt; $word
    ) {
    }
}

&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-bash" data-lang="bash"&gt;vendor/bin/di-config-dump src/Vendor/Hello.php
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;will output&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-bash" data-lang="bash"&gt;$di-&amp;gt;params&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;Vendor\Hello&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;response&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $di-&amp;gt;lazyGet&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;aura/web-kernel:response&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;;
$di-&amp;gt;params&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;Vendor\Hello&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;request&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $di-&amp;gt;lazyGet&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;aura/web-kernel:request&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;;
$di-&amp;gt;params&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;Vendor\Hello&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;router&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $di-&amp;gt;lazyGet&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;aura/web-kernel:router&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;;
$di-&amp;gt;params&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;Vendor\Hello&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;word&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $di-&amp;gt;lazyNew&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;Vendor\World&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If you look carefully the &lt;code&gt;Aura\Web\Response&lt;/code&gt;, &lt;code&gt;Aura\Web\Request&lt;/code&gt; and &lt;code&gt;Aura\Router\Router&lt;/code&gt; are making use of &lt;code&gt;lazyGet&lt;/code&gt; which gets the shared instance of the &lt;a href="https://github.com/auraphp/Aura.Web_Kernel"&gt;Aura.Web_Kernel&lt;/a&gt; .&lt;/p&gt;
&lt;p&gt;If you are not using inside the framework just pass something as 2nd argument.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-bash" data-lang="bash"&gt;vendor/bin/di-config-dump src/Vendor/Hello.php h
$di-&amp;gt;params&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;Vendor\Hello&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;response&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $di-&amp;gt;lazyNew&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;Aura\Web\Response&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;;
$di-&amp;gt;params&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;Vendor\Hello&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;request&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $di-&amp;gt;lazyNew&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;Aura\Web\Request&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;;
$di-&amp;gt;params&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;Vendor\Hello&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;router&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $di-&amp;gt;lazyNew&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;Aura\Router\Router&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;;
$di-&amp;gt;params&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;Vendor\Hello&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;word&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;]&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $di-&amp;gt;lazyNew&lt;span style="color:#f92672"&gt;(&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;Vendor\World&amp;#39;&lt;/span&gt;&lt;span style="color:#f92672"&gt;)&lt;/span&gt;;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;Please make sure all the files need to be autoloadable in-order to generate this.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;If you like to improve something &lt;a href="https://github.com/friendsofaura/FOA.DiConfig"&gt;fork and contribute&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;I have purposefully left not to make use of &lt;a href="https://github.com/auraphp/Aura.Cli"&gt;Aura.Cli&lt;/a&gt; in this library. Not sure if we need to integrate or not.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>getting started with aura v2</title>
      <link>https://harikt.com/blog/2014/10/06/getting-started-with-aura-v2/</link>
      <pubDate>Mon, 06 Oct 2014 00:00:00 +0000</pubDate>
      <guid>https://harikt.com/blog/2014/10/06/getting-started-with-aura-v2/</guid>
      <description>&lt;p&gt;Yesterday &lt;a href="http://auraphp.com/blog/2014/10/05/stable-project-releases/"&gt;aura framework v2 stable released&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Lots of complains about documentation or missing documentation. So this is a quick start. Probably a five minutes walk through. Learn and change to make it better.&lt;/p&gt;
&lt;h2 id="creating-your-project"&gt;Creating your project&lt;/h2&gt;
&lt;p&gt;Create the project using composer.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-bash" data-lang="bash"&gt;composer create-project aura/web-project quick-start
cd quick-start
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The minimal framework don't come with any sort of view integrated. Let us use &lt;code&gt;aura/view&lt;/code&gt;, the two step templating with the help of &lt;code&gt;foa/html-view-bundle&lt;/code&gt;.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;composer require &amp;quot;foa/html-view-bundle:~2.0&amp;quot;
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;We will be keeping all the templates in &lt;code&gt;templates&lt;/code&gt; folder where views in &lt;code&gt;templates/views&lt;/code&gt; and layout in &lt;code&gt;templates/layouts&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-bash" data-lang="bash"&gt;mkdir -p templates/&lt;span style="color:#f92672"&gt;{&lt;/span&gt;views,layouts&lt;span style="color:#f92672"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Edit &lt;code&gt;config/Common.php&lt;/code&gt; and define service for &lt;code&gt;view&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;define&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;Container&lt;/span&gt; $di)
{
    $di&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;set&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;view&amp;#39;&lt;/span&gt;, $di&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;lazyNew&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;Aura\View\View&amp;#39;&lt;/span&gt;));
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;add a way to set the path to templates. Assuming you have &lt;code&gt;templates&lt;/code&gt; folder in the root. There is no finder in &lt;code&gt;aura/view&lt;/code&gt; to increase the performance of loading and rendering templates. For a quick hack let us iterate through the directory and set all the views and layouts to its registry.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;modify&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;Container&lt;/span&gt; $di)
{
    &lt;span style="color:#75715e"&gt;// more code
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;    $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;defineTemplates&lt;/span&gt;($di);
}

&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;defineTemplates&lt;/span&gt;($di)
{
    $view &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $di&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;get&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;view&amp;#39;&lt;/span&gt;);
    $view_registry &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $view&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getViewRegistry&lt;/span&gt;();
    $view_directory &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;dirname&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;__DIR__&lt;/span&gt;) &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;/templates/views/&amp;#39;&lt;/span&gt;;
    $iterator &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;\DirectoryIterator&lt;/span&gt;($view_directory);
    &lt;span style="color:#66d9ef"&gt;foreach&lt;/span&gt; ($iterator &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; $fileinfo) {
        &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; ($fileinfo&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;isFile&lt;/span&gt;()) {
            $view_registry&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;set&lt;/span&gt;($fileinfo&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getBasename&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;.php&amp;#39;&lt;/span&gt;), $fileinfo&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getPathname&lt;/span&gt;());
        }
    }

    $layout_registry &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $view&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getLayoutRegistry&lt;/span&gt;();
    $layout_directory &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;dirname&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;__DIR__&lt;/span&gt;) &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;/templates/layouts/&amp;#39;&lt;/span&gt;;
    $iterator &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;\DirectoryIterator&lt;/span&gt;($layout_directory);
    &lt;span style="color:#66d9ef"&gt;foreach&lt;/span&gt; ($iterator &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; $fileinfo) {
        &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; ($fileinfo&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;isFile&lt;/span&gt;()) {
            $layout_registry&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;set&lt;/span&gt;($fileinfo&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getBasename&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;.php&amp;#39;&lt;/span&gt;), $fileinfo&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getPathname&lt;/span&gt;());
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Edit &lt;code&gt;modifyDispatcher&lt;/code&gt; method to&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;modifyWebDispatcher&lt;/span&gt;($di)
{
    $dispatcher &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $di&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;get&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;aura/web-kernel:dispatcher&amp;#39;&lt;/span&gt;);

    $view &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $di&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;get&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;view&amp;#39;&lt;/span&gt;);
    $response &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $di&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;get&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;aura/web-kernel:response&amp;#39;&lt;/span&gt;);
    $request &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $di&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;get&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;aura/web-kernel:request&amp;#39;&lt;/span&gt;);
    $dispatcher&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setObject&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;hello&amp;#39;&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; () &lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; ($view, $response, $request) {
        $name &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $request&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;query&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;get&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;Aura&amp;#39;&lt;/span&gt;);
        $view&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setView&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;hello&amp;#39;&lt;/span&gt;);
        $view&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setLayout&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;default&amp;#39;&lt;/span&gt;);
        $view&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setData&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;array&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;name&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; $name));
        $response&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;content&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;set&lt;/span&gt;($view&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;__invoke&lt;/span&gt;());
    });
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Create your basic template &lt;code&gt;templates/views/hello.php&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt; &lt;span style="color:#75715e"&gt;// templates/views/hello.php ?&amp;gt;
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;php&lt;/span&gt; $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;title&lt;/span&gt;()&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;set&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#34;Hello from aura&amp;#34;&lt;/span&gt;); &lt;span style="color:#75715e"&gt;?&amp;gt;&lt;/span&gt;
&amp;lt;&lt;span style="color:#f92672"&gt;p&lt;/span&gt;&amp;gt;Hello &lt;span style="color:#75715e"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt; $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;name&lt;/span&gt;; &lt;span style="color:#75715e"&gt;?&amp;gt;&lt;/span&gt;&amp;lt;/&lt;span style="color:#f92672"&gt;p&lt;/span&gt;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and a very basic layout&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt; &lt;span style="color:#75715e"&gt;// templates/layouts/default.php ?&amp;gt;
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;lt;!&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;DOCTYPE&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;html&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;html&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;xmlns&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;http://www.w3.org/1999/xhtml&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;xml&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;lang&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;en&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;lang&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;en-us&amp;#34;&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
  &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;head&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#f92672"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;php&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;echo&lt;/span&gt; $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;title&lt;/span&gt;(); &lt;span style="color:#75715e"&gt;?&amp;gt;&lt;/span&gt;
  &amp;lt;/&lt;span style="color:#f92672"&gt;head&lt;/span&gt;&amp;gt;
  &amp;lt;&lt;span style="color:#f92672"&gt;body&lt;/span&gt;&amp;gt;
    &lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;echo&lt;/span&gt; $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getContent&lt;/span&gt;(); &lt;span style="color:#75715e"&gt;?&amp;gt;&lt;/span&gt;
  &amp;lt;/&lt;span style="color:#f92672"&gt;body&lt;/span&gt;&amp;gt;
&amp;lt;/&lt;span style="color:#f92672"&gt;html&lt;/span&gt;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Let us fire the php server&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-bash" data-lang="bash"&gt;php -S localhost:8000 web/index.php
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;and point your browser to &lt;code&gt;http://localhost:8000&lt;/code&gt; .&lt;/p&gt;
&lt;p&gt;Probably very simple way how to use &lt;a href="http://auraphp.com"&gt;aura&lt;/a&gt; as a micro framework!.&lt;/p&gt;
&lt;p&gt;You can see the &lt;a href="https://github.com/harikt/quick-start"&gt;example over github&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="what-is-next"&gt;What is next?&lt;/h2&gt;
&lt;p&gt;Read &lt;a href="https://leanpub.com/aurav2/"&gt;Aura Framework v2 : The missing Manual&lt;/a&gt; and  &lt;a href="https://github.com/harikt/aurav2book"&gt;report/contribute&lt;/a&gt; to the book.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>aura input form inside slim framework</title>
      <link>https://harikt.com/blog/2014/09/02/aura-input-form-inside-slim-framework/</link>
      <pubDate>Tue, 02 Sep 2014 00:00:00 +0000</pubDate>
      <guid>https://harikt.com/blog/2014/09/02/aura-input-form-inside-slim-framework/</guid>
      <description>&lt;p&gt;Rob Allen wrote about &lt;a href="http://akrabat.com/zend-framework-2/integrating-zf2-forms-into-slim/"&gt;Integrating ZF2 forms into Slim&lt;/a&gt;.
I did write how you can use &lt;a href="https://github.com/auraphp/Aura.Input/tree/develop"&gt;Aura.Input&lt;/a&gt; and &lt;a href="https://github.com/auraphp/Aura.Html"&gt;Aura.Html&lt;/a&gt; to create &lt;a href="http://harikt.com/phpform/"&gt;standalone form for PHP&lt;/a&gt;.
This time I felt I should write about integrating aura input inside &lt;a href="http://slimframework.com/"&gt;Slim&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Let us install a few dependencies &lt;code&gt;aura/input&lt;/code&gt; for building the form and
&lt;code&gt;aura/html&lt;/code&gt; for the html helpers. You of-course can skip not to use &lt;code&gt;aura/html&lt;/code&gt;
and build your own helper. I also purposefully left not integrating the powerful
&lt;a href="https://github.com/auraphp/Aura.Filter/tree/develop"&gt;Aura.Filter&lt;/a&gt; , but you
are not limited to integrate any validator you love inside Aura.Input .&lt;/p&gt;
&lt;p&gt;The full &lt;code&gt;composer.json&lt;/code&gt; is as below.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-json" data-lang="json"&gt;{
    &lt;span style="color:#f92672"&gt;&amp;#34;require&amp;#34;&lt;/span&gt;: {
        &lt;span style="color:#f92672"&gt;&amp;#34;slim/slim&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;2.*&amp;#34;&lt;/span&gt;,
        &lt;span style="color:#f92672"&gt;&amp;#34;aura/html&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;2.0.0&amp;#34;&lt;/span&gt;,
        &lt;span style="color:#f92672"&gt;&amp;#34;aura/input&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;1.*&amp;#34;&lt;/span&gt;
    },
    &lt;span style="color:#f92672"&gt;&amp;#34;autoload&amp;#34;&lt;/span&gt;:{
        &lt;span style="color:#f92672"&gt;&amp;#34;psr-0&amp;#34;&lt;/span&gt;:{
            &lt;span style="color:#f92672"&gt;&amp;#34;&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;src/&amp;#34;&lt;/span&gt;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;We will keep &lt;code&gt;ContactForm.php&lt;/code&gt; under &lt;code&gt;src&lt;/code&gt; folder. ie why you see the
&lt;code&gt;autoload&lt;/code&gt; in &lt;code&gt;composer.json&lt;/code&gt;. The form looks as below.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#75715e"&gt;// src/ContactForm.php
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Aura\Input\Form&lt;/span&gt;;

&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ContactForm&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;extends&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Form&lt;/span&gt;
{
    &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;init&lt;/span&gt;()
    {
        $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setField&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;)
            &lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setAttribs&lt;/span&gt;([
                &lt;span style="color:#e6db74"&gt;&amp;#39;id&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;contact[name]&amp;#39;&lt;/span&gt;,
                &lt;span style="color:#e6db74"&gt;&amp;#39;name&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;contact[name]&amp;#39;&lt;/span&gt;,
                &lt;span style="color:#e6db74"&gt;&amp;#39;size&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;20&lt;/span&gt;,
                &lt;span style="color:#e6db74"&gt;&amp;#39;maxlength&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;20&lt;/span&gt;,
            ]);
        $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setField&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;email&amp;#39;&lt;/span&gt;)
            &lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setAttribs&lt;/span&gt;([
                &lt;span style="color:#e6db74"&gt;&amp;#39;id&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;contact[email]&amp;#39;&lt;/span&gt;,
                &lt;span style="color:#e6db74"&gt;&amp;#39;name&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;contact[email]&amp;#39;&lt;/span&gt;,
                &lt;span style="color:#e6db74"&gt;&amp;#39;size&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;20&lt;/span&gt;,
                &lt;span style="color:#e6db74"&gt;&amp;#39;maxlength&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;20&lt;/span&gt;,
            ]);
        $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setField&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;url&amp;#39;&lt;/span&gt;)
            &lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setAttribs&lt;/span&gt;([
                &lt;span style="color:#e6db74"&gt;&amp;#39;id&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;contact[url]&amp;#39;&lt;/span&gt;,
                &lt;span style="color:#e6db74"&gt;&amp;#39;name&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;contact[url]&amp;#39;&lt;/span&gt;,
                &lt;span style="color:#e6db74"&gt;&amp;#39;size&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;20&lt;/span&gt;,
                &lt;span style="color:#e6db74"&gt;&amp;#39;maxlength&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;20&lt;/span&gt;,
            ]);
        $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setField&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;message&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;textarea&amp;#39;&lt;/span&gt;)
            &lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setAttribs&lt;/span&gt;([
                &lt;span style="color:#e6db74"&gt;&amp;#39;id&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;contact[message]&amp;#39;&lt;/span&gt;,
                &lt;span style="color:#e6db74"&gt;&amp;#39;name&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;contact[message]&amp;#39;&lt;/span&gt;,
                &lt;span style="color:#e6db74"&gt;&amp;#39;cols&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;40&lt;/span&gt;,
                &lt;span style="color:#e6db74"&gt;&amp;#39;rows&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;5&lt;/span&gt;,
            ]);
        $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setField&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;submit&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;submit&amp;#39;&lt;/span&gt;)
            &lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setAttribs&lt;/span&gt;([&lt;span style="color:#e6db74"&gt;&amp;#39;value&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;send&amp;#39;&lt;/span&gt;]);

        $filter &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getFilter&lt;/span&gt;();

        $filter&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setRule&lt;/span&gt;(
            &lt;span style="color:#e6db74"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;,
            &lt;span style="color:#e6db74"&gt;&amp;#39;Name must be alphabetic only.&amp;#39;&lt;/span&gt;,
            &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; ($value) {
                &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ctype_alpha&lt;/span&gt;($value);
            }
        );

        $filter&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setRule&lt;/span&gt;(
            &lt;span style="color:#e6db74"&gt;&amp;#39;email&amp;#39;&lt;/span&gt;,
            &lt;span style="color:#e6db74"&gt;&amp;#39;Enter a valid email address&amp;#39;&lt;/span&gt;,
            &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; ($value) {
                &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;filter_var&lt;/span&gt;($value, &lt;span style="color:#a6e22e"&gt;FILTER_VALIDATE_EMAIL&lt;/span&gt;);
            }
        );

        $filter&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setRule&lt;/span&gt;(
            &lt;span style="color:#e6db74"&gt;&amp;#39;url&amp;#39;&lt;/span&gt;,
            &lt;span style="color:#e6db74"&gt;&amp;#39;Enter a valid url&amp;#39;&lt;/span&gt;,
            &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; ($value) {
                &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;filter_var&lt;/span&gt;($value, &lt;span style="color:#a6e22e"&gt;FILTER_VALIDATE_URL&lt;/span&gt;);
            }
        );

        $filter&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;setRule&lt;/span&gt;(
            &lt;span style="color:#e6db74"&gt;&amp;#39;message&amp;#39;&lt;/span&gt;,
            &lt;span style="color:#e6db74"&gt;&amp;#39;Message should be more than 7 characters&amp;#39;&lt;/span&gt;,
            &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; ($value) {
                &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; (&lt;span style="color:#a6e22e"&gt;strlen&lt;/span&gt;($value) &lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;7&lt;/span&gt;) {
                    &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;true&lt;/span&gt;;
                }
                &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;false&lt;/span&gt;;
            }
        );
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The entry point &lt;code&gt;web/index.php&lt;/code&gt; looks as below.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#75715e"&gt;// web/index.php
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Aura\Input\Builder&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Aura\Input\Filter&lt;/span&gt;;

&lt;span style="color:#66d9ef"&gt;require&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;dirname&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;__DIR__&lt;/span&gt;) &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;/vendor/autoload.php&amp;#39;&lt;/span&gt;;
$app &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;\Slim\Slim&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;array&lt;/span&gt;(
    &lt;span style="color:#e6db74"&gt;&amp;#39;templates&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;dirname&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;__DIR__&lt;/span&gt;) &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;/templates&amp;#39;&lt;/span&gt;
));
$app&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;map&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;/contact&amp;#39;&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; () &lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; ($app) {
    $form &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ContactForm&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Builder&lt;/span&gt;(), &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Filter&lt;/span&gt;());
    &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; ($app&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;request&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;isPost&lt;/span&gt;()) {
        $form&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;fill&lt;/span&gt;($app&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;request&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;post&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;contact&amp;#39;&lt;/span&gt;));
        &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; ($form&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;filter&lt;/span&gt;()) {
            &lt;span style="color:#66d9ef"&gt;echo&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;Yes successfully validated and filtered&amp;#34;&lt;/span&gt;;
            &lt;span style="color:#a6e22e"&gt;var_dump&lt;/span&gt;($data);
            $app&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;halt&lt;/span&gt;();
        }
    }
    $app&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;render&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;contact.php&amp;#39;&lt;/span&gt;, &lt;span style="color:#66d9ef"&gt;array&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;form&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; $form));
})&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;via&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;GET&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;POST&amp;#39;&lt;/span&gt;)
&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;name&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;contact&amp;#39;&lt;/span&gt;);

$app&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;run&lt;/span&gt;();
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The template &lt;code&gt;contact.php&lt;/code&gt; resides under templates folder.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#75715e"&gt;// templates/contact.php
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Aura\Html\HelperLocatorFactory&lt;/span&gt;;

$factory &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;HelperLocatorFactory&lt;/span&gt;();
$helper &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $factory&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;newInstance&lt;/span&gt;();

&lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;showFieldErrors&lt;/span&gt;($form, $name) {
    $errors &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $form&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;getMessages&lt;/span&gt;($name);
    $str &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;&amp;#39;&lt;/span&gt;;
    &lt;span style="color:#66d9ef"&gt;if&lt;/span&gt; ($errors) {
        $str &lt;span style="color:#f92672"&gt;.=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;&amp;lt;ul&amp;gt;&amp;#39;&lt;/span&gt;;
        &lt;span style="color:#66d9ef"&gt;foreach&lt;/span&gt; ($errors &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; $error) {
            $str &lt;span style="color:#f92672"&gt;.=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;&amp;lt;li&amp;gt;&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;.&lt;/span&gt; $error &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;&amp;lt;/li&amp;gt;&amp;#39;&lt;/span&gt;;
        }
        $str &lt;span style="color:#f92672"&gt;.=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;&amp;lt;/ul&amp;gt;&amp;#39;&lt;/span&gt;;
    }
    &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; $str;
}
&lt;span style="color:#75715e"&gt;?&amp;gt;&lt;/span&gt;
&amp;lt;&lt;span style="color:#f92672"&gt;html&lt;/span&gt;&amp;gt;
&amp;lt;&lt;span style="color:#f92672"&gt;head&lt;/span&gt;&amp;gt;
    &amp;lt;&lt;span style="color:#f92672"&gt;title&lt;/span&gt;&amp;gt;Aura input form, inside slim framework&amp;lt;/&lt;span style="color:#f92672"&gt;title&lt;/span&gt;&amp;gt;
&amp;lt;/&lt;span style="color:#f92672"&gt;head&lt;/span&gt;&amp;gt;
&amp;lt;&lt;span style="color:#f92672"&gt;body&lt;/span&gt;&amp;gt;
    &amp;lt;&lt;span style="color:#f92672"&gt;form&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;method&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;post&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;action&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;echo&lt;/span&gt; $app&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;urlFor&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;contact&amp;#39;&lt;/span&gt;); &lt;span style="color:#75715e"&gt;?&amp;gt;&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;enctype&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;multipart/form-data&amp;#34;&lt;/span&gt; &amp;gt;
        &amp;lt;&lt;span style="color:#f92672"&gt;table&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;cellpadding&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;0&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;cellspacing&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;0&amp;#34;&lt;/span&gt;&amp;gt;
            &amp;lt;&lt;span style="color:#f92672"&gt;tr&lt;/span&gt;&amp;gt;
                &amp;lt;&lt;span style="color:#f92672"&gt;td&lt;/span&gt;&amp;gt;Name : &amp;lt;/&lt;span style="color:#f92672"&gt;td&lt;/span&gt;&amp;gt;
                &amp;lt;&lt;span style="color:#f92672"&gt;td&lt;/span&gt;&amp;gt;
                &lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
                    &lt;span style="color:#66d9ef"&gt;echo&lt;/span&gt; $helper&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;input&lt;/span&gt;($form&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;get&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;));
                    &lt;span style="color:#66d9ef"&gt;echo&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;showFieldErrors&lt;/span&gt;($form, &lt;span style="color:#e6db74"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;);
                &lt;span style="color:#75715e"&gt;?&amp;gt;&lt;/span&gt;
                &amp;lt;/&lt;span style="color:#f92672"&gt;td&lt;/span&gt;&amp;gt;
            &amp;lt;/&lt;span style="color:#f92672"&gt;tr&lt;/span&gt;&amp;gt;
            &amp;lt;&lt;span style="color:#f92672"&gt;tr&lt;/span&gt;&amp;gt;
                &amp;lt;&lt;span style="color:#f92672"&gt;td&lt;/span&gt;&amp;gt;Email : &amp;lt;/&lt;span style="color:#f92672"&gt;td&lt;/span&gt;&amp;gt;
                &amp;lt;&lt;span style="color:#f92672"&gt;td&lt;/span&gt;&amp;gt;
                &lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
                    &lt;span style="color:#66d9ef"&gt;echo&lt;/span&gt; $helper&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;input&lt;/span&gt;($form&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;get&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;email&amp;#39;&lt;/span&gt;));
                    &lt;span style="color:#66d9ef"&gt;echo&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;showFieldErrors&lt;/span&gt;($form, &lt;span style="color:#e6db74"&gt;&amp;#39;email&amp;#39;&lt;/span&gt;);
                &lt;span style="color:#75715e"&gt;?&amp;gt;&lt;/span&gt;
                &amp;lt;/&lt;span style="color:#f92672"&gt;td&lt;/span&gt;&amp;gt;
            &amp;lt;/&lt;span style="color:#f92672"&gt;tr&lt;/span&gt;&amp;gt;
            &amp;lt;&lt;span style="color:#f92672"&gt;tr&lt;/span&gt;&amp;gt;
                &amp;lt;&lt;span style="color:#f92672"&gt;td&lt;/span&gt;&amp;gt;Url : &amp;lt;/&lt;span style="color:#f92672"&gt;td&lt;/span&gt;&amp;gt;
                &amp;lt;&lt;span style="color:#f92672"&gt;td&lt;/span&gt;&amp;gt;
                &lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
                    &lt;span style="color:#66d9ef"&gt;echo&lt;/span&gt; $helper&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;input&lt;/span&gt;($form&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;get&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;url&amp;#39;&lt;/span&gt;));
                    &lt;span style="color:#66d9ef"&gt;echo&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;showFieldErrors&lt;/span&gt;($form, &lt;span style="color:#e6db74"&gt;&amp;#39;url&amp;#39;&lt;/span&gt;);
                &lt;span style="color:#75715e"&gt;?&amp;gt;&lt;/span&gt;
                &amp;lt;/&lt;span style="color:#f92672"&gt;td&lt;/span&gt;&amp;gt;
            &amp;lt;/&lt;span style="color:#f92672"&gt;tr&lt;/span&gt;&amp;gt;
            &amp;lt;&lt;span style="color:#f92672"&gt;tr&lt;/span&gt;&amp;gt;
                &amp;lt;&lt;span style="color:#f92672"&gt;td&lt;/span&gt;&amp;gt;Message : &amp;lt;/&lt;span style="color:#f92672"&gt;td&lt;/span&gt;&amp;gt;
                &amp;lt;&lt;span style="color:#f92672"&gt;td&lt;/span&gt;&amp;gt;
                &lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
                    &lt;span style="color:#66d9ef"&gt;echo&lt;/span&gt; $helper&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;input&lt;/span&gt;($form&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;get&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;message&amp;#39;&lt;/span&gt;));
                    &lt;span style="color:#66d9ef"&gt;echo&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;showFieldErrors&lt;/span&gt;($form, &lt;span style="color:#e6db74"&gt;&amp;#39;message&amp;#39;&lt;/span&gt;);
                &lt;span style="color:#75715e"&gt;?&amp;gt;&lt;/span&gt;
                &amp;lt;/&lt;span style="color:#f92672"&gt;td&lt;/span&gt;&amp;gt;
            &amp;lt;/&lt;span style="color:#f92672"&gt;tr&lt;/span&gt;&amp;gt;
            &amp;lt;&lt;span style="color:#f92672"&gt;tr&lt;/span&gt;&amp;gt;
                &amp;lt;&lt;span style="color:#f92672"&gt;td&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;colspan&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;2&amp;#34;&lt;/span&gt;&amp;gt;
                &lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
                &lt;span style="color:#66d9ef"&gt;echo&lt;/span&gt; $helper&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;input&lt;/span&gt;($form&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;get&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;submit&amp;#39;&lt;/span&gt;));
                &lt;span style="color:#75715e"&gt;?&amp;gt;&lt;/span&gt;
                &amp;lt;/&lt;span style="color:#f92672"&gt;td&lt;/span&gt;&amp;gt;
            &amp;lt;/&lt;span style="color:#f92672"&gt;tr&lt;/span&gt;&amp;gt;
        &amp;lt;/&lt;span style="color:#f92672"&gt;table&lt;/span&gt;&amp;gt;
    &amp;lt;/&lt;span style="color:#f92672"&gt;form&lt;/span&gt;&amp;gt;
&amp;lt;/&lt;span style="color:#f92672"&gt;body&lt;/span&gt;&amp;gt;
&amp;lt;/&lt;span style="color:#f92672"&gt;html&lt;/span&gt;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;blockquote&gt;
&lt;p&gt;NB: If you need to reuse the functionality of &lt;code&gt;showFieldErrors&lt;/code&gt; keep it on a separate file and require it.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Thank you &lt;a href="https://twitter.com/silentworks"&gt;Andrew Smith&lt;/a&gt;, &lt;a href="https://twitter.com/cschorn"&gt;Christian Schorn&lt;/a&gt; for the proof reading and tips provided.&lt;/p&gt;
&lt;p&gt;I hope you will find something interesting in the integration!.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/harikt/slim-aura-form"&gt;Download and play with code from github&lt;/a&gt;&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>aura framework v2 the missing manual</title>
      <link>https://harikt.com/blog/2014/07/15/aura-framework-v2-the-missing-manual/</link>
      <pubDate>Tue, 15 Jul 2014 00:00:00 +0000</pubDate>
      <guid>https://harikt.com/blog/2014/07/15/aura-framework-v2-the-missing-manual/</guid>
      <description>&lt;p&gt;&lt;a href="http://auraphp.com"&gt;Aura&lt;/a&gt; has an awesome collection of
&lt;a href="https://github.com/auraphp"&gt;libraries&lt;/a&gt; for different purpose.&lt;/p&gt;
&lt;p&gt;It has components for
&lt;a href="https://github.com/auraphp/Aura.Auth"&gt;authentication&lt;/a&gt;,
&lt;a href="https://github.com/auraphp/Aura.Cli"&gt;cli&lt;/a&gt;,
&lt;a href="https://github.com/auraphp/Aura.Web"&gt;request and response&lt;/a&gt;,
&lt;a href="https://github.com/auraphp/Aura.Router"&gt;router&lt;/a&gt;,
&lt;a href="https://github.com/auraphp/Aura.Router"&gt;dependency injection container&lt;/a&gt;,
&lt;a href="https://github.com/auraphp/Aura.Dispatcher"&gt;dispatcher&lt;/a&gt;,
&lt;a href="https://github.com/auraphp/Aura.Html"&gt;html&lt;/a&gt;,
&lt;a href="https://github.com/auraphp/Aura.View"&gt;view&lt;/a&gt;,
&lt;a href="https://github.com/auraphp/Aura.Signal"&gt;event handlers&lt;/a&gt;,
&lt;a href="https://github.com/auraphp/Aura.Filter"&gt;validation&lt;/a&gt;,
&lt;a href="https://github.com/auraphp/Aura.Sql"&gt;extended pdo&lt;/a&gt;,
&lt;a href="https://github.com/auraphp/Aura.SqlQuery"&gt;query builders&lt;/a&gt;,
&lt;a href="https://github.com/auraphp/Aura.SqlSchema"&gt;sql schema&lt;/a&gt;,
&lt;a href="https://github.com/auraphp/Aura.Marshal"&gt;marshal&lt;/a&gt;,
&lt;a href="https://github.com/auraphp/Aura.Uri"&gt;build and modify uri&lt;/a&gt;,
&lt;a href="https://github.com/auraphp/Aura.Http"&gt;http&lt;/a&gt;,
&lt;a href="https://github.com/auraphp/Aura.Intl"&gt;internationalization&lt;/a&gt;,
&lt;a href="https://github.com/auraphp/Aura.Session"&gt;session&lt;/a&gt;,
&lt;a href="https://github.com/auraphp/Aura.Input"&gt;forms&lt;/a&gt;,
&lt;a href="https://github.com/auraphp/Aura.Include"&gt;includer&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you are new to aura, there is probably something you
may want to figure out yourself.&lt;/p&gt;
&lt;p&gt;Some of the components have &lt;a href="http://auraphp.com/packages/"&gt;version 1&lt;/a&gt; and
&lt;a href="http://auraphp.com/packages/v2"&gt;version 2&lt;/a&gt; releases.
There is a question of which branch corresponds to which version.&lt;/p&gt;
&lt;p&gt;The v1 packages are in &lt;code&gt;develop&lt;/code&gt; branch and v2 over &lt;code&gt;develop-2&lt;/code&gt; branch.&lt;/p&gt;
&lt;p&gt;There are a few changes in v1 to v2. It is easy to understand when you
look into the &lt;code&gt;composer.json&lt;/code&gt; or if you know aura
v2 follows &lt;a href="http://www.php-fig.org/psr/psr-4/"&gt;psr-4&lt;/a&gt;
directory structure than the v1 that followed
&lt;a href="http://www.php-fig.org/psr/psr-0/"&gt;psr-0&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;If you see a package &lt;code&gt;&amp;quot;aura/installer-default&amp;quot;: &amp;quot;1.0.0&amp;quot;&lt;/code&gt; in the
require of &lt;code&gt;composer.json&lt;/code&gt; it is for sure v1.&lt;/p&gt;
&lt;p&gt;Composer installs every package in the vendor folder. The
name of the package installed will be the package name. So basically
it installs &lt;code&gt;vendor/aura/&amp;lt;package-name&amp;gt;&lt;/code&gt; .&lt;/p&gt;
&lt;p&gt;In aura framework v1 we have some specific folder structure and it was
before composer becomes a standard. So when composer became a standard
we added a way to install the framework specific installations in
&lt;code&gt;package&lt;/code&gt; folder and the rest of the library installation (other than aura framework)
in the same way as composer did.&lt;/p&gt;
&lt;p&gt;So was the existence of &lt;code&gt;aura/installer-default&lt;/code&gt; in v1 package. In v2 we moved
to &lt;a href="http://auraphp.com/blog/2014/04/07/two-stage-config/"&gt;composer assisted two stage configuration&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="v2-framework"&gt;v2 Framework&lt;/h2&gt;
&lt;p&gt;There exists a &lt;a href="https://github.com/auraphp/Aura.Web_Project"&gt;micro framework/full stack&lt;/a&gt;
framework for v2. But things are hard to find when you are
new to aura and when &lt;a href="https://github.com/auraphp"&gt;github organization&lt;/a&gt;
have more than 30 repositories.&lt;/p&gt;
&lt;p&gt;[Aura framework]((&lt;a href="https://github.com/auraphp/Aura.Framework_Project"&gt;https://github.com/auraphp/Aura.Framework_Project&lt;/a&gt;)
is built on top of aura libraries, and the library docs
applies to the framework also. But people new to aura may be having
hard time to find the specific documentation or may be stuck sometime.
I don’t know whether my thoughts are right or wrong.&lt;/p&gt;
&lt;p&gt;Documentation is one of the hardest problem when newer versions
are released. Say 1.0.0 released, 1.1.0 &amp;hellip; although the documentation
is there in the installed repo, it is probably hard to make things online.&lt;/p&gt;
&lt;p&gt;I was talking with &lt;a href="http://paul-m-jones.com/"&gt;Paul M Jones&lt;/a&gt;
regarding the documentation lately,
and he too shared some concerns. Talking with him gave me some
inspiration to start
&lt;a href="http://leanpub.com/aurav2/read"&gt;the missing manual for the aura framework&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="goal"&gt;Goal&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;let people read and learn&lt;/li&gt;
&lt;li&gt;promote aura with good documentation&lt;/li&gt;
&lt;li&gt;at the sametime, to make a living&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Yes, I am independent freelance php developer. It was a sad
story that I don’t want to recall how I became a freelancer
by chance.&lt;/p&gt;
&lt;p&gt;Before my freelancing, I was down for a few months, not physically
but mentally which has impacted my life with some ups and downs.
But now I really love working as an independent contractor.&lt;/p&gt;
&lt;h2 id="about-the-book"&gt;About the book&lt;/h2&gt;
&lt;p&gt;You can find the &lt;a href="http://github.com/harikt/aurav2book"&gt;book over github&lt;/a&gt;
licensed under
&lt;a href="http://creativecommons.org/licenses/by-sa/3.0/deed.en_US"&gt;Creative Commons Attribution-ShareAlike 3.0 Unported License&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The book is available &lt;a href="https://leanpub.com/aurav2/read"&gt;free to read online&lt;/a&gt;.
If you find a typo, or feel something can be improved
&lt;a href="https://github.com/harikt/aurav2book/issues"&gt;open an issue&lt;/a&gt;
or &lt;a href="https://help.github.com/articles/using-pull-requests"&gt;send a pull request&lt;/a&gt; .&lt;/p&gt;
&lt;p&gt;If you find it interesting you should consider
&lt;a href="https://leanpub.com/aurav2/packages/book/purchases/new"&gt;buying a copy from leanpub&lt;/a&gt;
to show your support to the project.&lt;/p&gt;
&lt;p&gt;Thank you.&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>hidden gems of composer</title>
      <link>https://harikt.com/blog/2014/05/29/hidden-gems-of-composer/</link>
      <pubDate>Thu, 29 May 2014 00:00:00 +0000</pubDate>
      <guid>https://harikt.com/blog/2014/05/29/hidden-gems-of-composer/</guid>
      <description>&lt;p&gt;I hope everyone in the PHP world is aware of &lt;a href="https://getcomposer.org"&gt;composer&lt;/a&gt;
the dependency management tool that gives an end to Pear.&lt;/p&gt;
&lt;p&gt;We can look into some of the hidden gems of composer. Some of them are
already documented in the composer docs.&lt;/p&gt;
&lt;h2 id="bug-fixing-"&gt;Bug Fixing :&lt;/h2&gt;
&lt;p&gt;Documented over &lt;a href="https://getcomposer.org/doc/05-repositories.md#loading-a-package-from-a-vcs-repository"&gt;Loading a package from a VCS repository&lt;/a&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-json" data-lang="json"&gt;{
    &lt;span style="color:#f92672"&gt;&amp;#34;repositories&amp;#34;&lt;/span&gt;: [
        {
            &lt;span style="color:#f92672"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;vcs&amp;#34;&lt;/span&gt;,
            &lt;span style="color:#f92672"&gt;&amp;#34;url&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;https://github.com/igorw/monolog&amp;#34;&lt;/span&gt;
        }
    ],
    &lt;span style="color:#f92672"&gt;&amp;#34;require&amp;#34;&lt;/span&gt;: {
        &lt;span style="color:#f92672"&gt;&amp;#34;monolog/monolog&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;dev-bugfix&amp;#34;&lt;/span&gt;
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The above example assume you have pushed your code to github. But you can
also make use of the local directory.&lt;/p&gt;
&lt;p&gt;Assume you are organizing your code something like&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-bash" data-lang="bash"&gt;home
└── github.com
    └── harikt
        ├── Aura.Router
        ├── Aura.Web
        └── monolog
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Now on your project you could make use of the patches you are working on
the local directory without pushing it to github.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Note : You should commit the changes though.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-json" data-lang="json"&gt;{
    &lt;span style="color:#f92672"&gt;&amp;#34;minimum-stability&amp;#34;&lt;/span&gt;:&lt;span style="color:#e6db74"&gt;&amp;#34;dev&amp;#34;&lt;/span&gt;,
    &lt;span style="color:#f92672"&gt;&amp;#34;repositories&amp;#34;&lt;/span&gt;: [
        {
            &lt;span style="color:#f92672"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;vcs&amp;#34;&lt;/span&gt;,
            &lt;span style="color:#f92672"&gt;&amp;#34;url&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;/home/github.com/harikt/monolog&amp;#34;&lt;/span&gt;            
        }
    ],
    &lt;span style="color:#f92672"&gt;&amp;#34;require&amp;#34;&lt;/span&gt;: {
        &lt;span style="color:#f92672"&gt;&amp;#34;monolog/monolog&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;dev-bugfix&amp;#34;&lt;/span&gt;
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And you can also disable packagist for fast look up.&lt;/p&gt;
&lt;h2 id="experimenting-your-own-packages"&gt;Experimenting your own packages&lt;/h2&gt;
&lt;p&gt;I did add packages in &lt;a href="https://packagist.org"&gt;packagist&lt;/a&gt; for testing.
This is really a wrong way to do, you are adding more packages that
makes other people's life hard to find a useful package.&lt;/p&gt;
&lt;p&gt;What I learned is, you can do in a different way. See docs under
&lt;a href="https://getcomposer.org/doc/05-repositories.md#package-2"&gt;Package&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;So your &lt;code&gt;composer.json&lt;/code&gt; will look something like this.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-json" data-lang="json"&gt;{
    &lt;span style="color:#f92672"&gt;&amp;#34;minimum-stability&amp;#34;&lt;/span&gt;:&lt;span style="color:#e6db74"&gt;&amp;#34;dev&amp;#34;&lt;/span&gt;,
    &lt;span style="color:#f92672"&gt;&amp;#34;repositories&amp;#34;&lt;/span&gt;: [        
        {
            &lt;span style="color:#f92672"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;package&amp;#34;&lt;/span&gt;,
            &lt;span style="color:#f92672"&gt;&amp;#34;package&amp;#34;&lt;/span&gt;: {
                &lt;span style="color:#f92672"&gt;&amp;#34;name&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;harikt/experiments&amp;#34;&lt;/span&gt;,
                &lt;span style="color:#f92672"&gt;&amp;#34;version&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;3.1.7&amp;#34;&lt;/span&gt;,               
                &lt;span style="color:#f92672"&gt;&amp;#34;source&amp;#34;&lt;/span&gt;: {
                    &lt;span style="color:#f92672"&gt;&amp;#34;type&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;git&amp;#34;&lt;/span&gt;,
                    &lt;span style="color:#f92672"&gt;&amp;#34;url&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;/home/github.com/harikt/experiments&amp;#34;&lt;/span&gt;,
                    &lt;span style="color:#f92672"&gt;&amp;#34;reference&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;master&amp;#34;&lt;/span&gt;
                },
                &lt;span style="color:#f92672"&gt;&amp;#34;autoload&amp;#34;&lt;/span&gt;: {
                    &lt;span style="color:#f92672"&gt;&amp;#34;classmap&amp;#34;&lt;/span&gt;: [&lt;span style="color:#e6db74"&gt;&amp;#34;libs/&amp;#34;&lt;/span&gt;]
                }
            }
        }
    ],
    &lt;span style="color:#f92672"&gt;&amp;#34;require&amp;#34;&lt;/span&gt;: {        
        &lt;span style="color:#f92672"&gt;&amp;#34;harikt/experiments&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;3.1.*&amp;#34;&lt;/span&gt;
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;That's for now.&lt;/p&gt;
&lt;p&gt;Happy PhPing!&lt;/p&gt;
</description>
    </item>
    
    <item>
      <title>extending plates with aura html helpers</title>
      <link>https://harikt.com/blog/2014/05/13/extending-plates-with-aura-html-helpers/</link>
      <pubDate>Tue, 13 May 2014 00:00:00 +0000</pubDate>
      <guid>https://harikt.com/blog/2014/05/13/extending-plates-with-aura-html-helpers/</guid>
      <description>&lt;p&gt;&lt;a href="https://github.com/auraphp/Aura.Html"&gt;Aura.Html&lt;/a&gt; provides HTML escapers and helpers, including form input helpers,
that can be used in any template, view, or presentation system.&lt;/p&gt;
&lt;p&gt;In this post I would like to give you a short introduction to Aura.Html
and how you could use with &lt;a href="http://platesphp.com"&gt;Plates&lt;/a&gt; a native php templating system like &lt;a href="https://github.com/auraphp/Aura.View"&gt;Aura.View&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;a href="https://github.com/auraphp/Aura.Html"&gt;Aura.Html&lt;/a&gt; was extracted from &lt;a href="https://github.com/auraphp/Aura.View"&gt;Aura.View&lt;/a&gt; helper functions of version 1,
when we at aura noticed that people who uses &lt;a href="https://github.com/auraphp/Aura.Input"&gt;Aura.Input&lt;/a&gt; may need some html helper
functions and they may not be using a templating like &lt;a href="https://github.com/auraphp/Aura.View"&gt;Aura.View&lt;/a&gt;,
but some other templating system.&lt;/p&gt;
&lt;p&gt;You can see an example of a simple &lt;a href="http://harikt.com/phpform/"&gt;contact form&lt;/a&gt; with &lt;a href="https://github.com/auraphp/Aura.Input"&gt;Aura.Input&lt;/a&gt;.&lt;/p&gt;
&lt;h2 id="installation"&gt;Installation&lt;/h2&gt;
&lt;p&gt;The easiest way to install Aura.Html is via composer. Let us create our &lt;code&gt;composer.json&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-json" data-lang="json"&gt;{
    &lt;span style="color:#f92672"&gt;&amp;#34;require&amp;#34;&lt;/span&gt;: {
        &lt;span style="color:#f92672"&gt;&amp;#34;aura/html&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;2.*@dev&amp;#34;&lt;/span&gt;,
        &lt;span style="color:#f92672"&gt;&amp;#34;league/plates&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;2.*&amp;#34;&lt;/span&gt;
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;One of the good thing about Plates is you can create &lt;a href="http://platesphp.com/extensions/"&gt;extensions&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Let us create an extension that can make use of &lt;a href="https://github.com/auraphp/Aura.Html"&gt;Aura.Html&lt;/a&gt; helpers inside &lt;a href="http://platesphp.com"&gt;Plates&lt;/a&gt;.
Any Plates extension should implement &lt;code&gt;League\Plates\Extension\ExtensionInterface&lt;/code&gt;
which contains a &lt;code&gt;getFunctions&lt;/code&gt; method which returns the functions
available within your templates.&lt;/p&gt;
&lt;p&gt;We are going to name it as &lt;code&gt;AuraHtmlExtension&lt;/code&gt; and call functions as
&lt;code&gt;aurahtml()&lt;/code&gt; or &lt;code&gt;html()&lt;/code&gt; via the template.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;League\Plates\Extension\ExtensionInterface&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Aura\Html\HelperLocator&lt;/span&gt;;

&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;AuraHtmlExtension&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;implements&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ExtensionInterface&lt;/span&gt;
{
    &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; $engine;

    &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; $template;

    &lt;span style="color:#66d9ef"&gt;protected&lt;/span&gt; $helper;

    &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; __construct(&lt;span style="color:#a6e22e"&gt;HelperLocator&lt;/span&gt; $helper)
    {
        $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;helper&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $helper;
    }

    &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;getFunctions&lt;/span&gt;()
    {
        &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;array&lt;/span&gt;(
            &lt;span style="color:#e6db74"&gt;&amp;#39;aurahtml&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;callHelper&amp;#39;&lt;/span&gt;,
            &lt;span style="color:#e6db74"&gt;&amp;#39;html&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;callHelper&amp;#39;&lt;/span&gt;
        );
    }

    &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;callHelper&lt;/span&gt;()
    {
        &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;helper&lt;/span&gt;;
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;But you are not limited to name it as the same
&lt;a href="https://github.com/auraphp/Aura.Html/blob/develop-2/README-HELPERS.md#aurahtml-tag-helpers"&gt;html tag helpers&lt;/a&gt;
and &lt;a href="https://github.com/auraphp/Aura.Html/blob/develop-2/README-FORMS.md"&gt;form helpers&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;So that will make the helpers look native Plates helpers. Thank you for
this functionality to plugin the helpers.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;League\Plates\Extension\ExtensionInterface&lt;/span&gt;;
&lt;span style="color:#66d9ef"&gt;use&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;Aura\Html\HelperLocator&lt;/span&gt;;

&lt;span style="color:#66d9ef"&gt;class&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;AuraHtmlExtension&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;implements&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;ExtensionInterface&lt;/span&gt;
{
    &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; $engine;

    &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; $template;

    &lt;span style="color:#66d9ef"&gt;protected&lt;/span&gt; $helper;

    &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; __construct(&lt;span style="color:#a6e22e"&gt;HelperLocator&lt;/span&gt; $helper)
    {
        $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;helper&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $helper;
    }

    &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;getFunctions&lt;/span&gt;()
    {
        &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;array&lt;/span&gt;(
            &lt;span style="color:#e6db74"&gt;&amp;#39;anchor&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;anchor&amp;#39;&lt;/span&gt;
            &lt;span style="color:#75715e"&gt;// ... more functions same as aura
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;        );
    }
    
    &lt;span style="color:#66d9ef"&gt;public&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;function&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;anchor&lt;/span&gt;($href, $text, &lt;span style="color:#66d9ef"&gt;array&lt;/span&gt; $attr &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;array&lt;/span&gt;())
    {
        &lt;span style="color:#66d9ef"&gt;return&lt;/span&gt; $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;helper&lt;/span&gt;&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;anchor&lt;/span&gt;($href, $text, &lt;span style="color:#66d9ef"&gt;array&lt;/span&gt; $attr);
    }
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Let us use the &lt;a href="http://platesphp.com/simple-example/"&gt;basic example in plates&lt;/a&gt;
and use aura html helper to show the system works as expected.&lt;/p&gt;
&lt;p&gt;Create the templates in a &lt;code&gt;templates&lt;/code&gt; folder or change the path in Plates Engine.&lt;/p&gt;
&lt;h3 id="profile-template"&gt;Profile Template&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#f92672"&gt;&amp;lt;!--&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;profile&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;php&lt;/span&gt; &lt;span style="color:#f92672"&gt;--&amp;gt;&lt;/span&gt;

&lt;span style="color:#f92672"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;php&lt;/span&gt; $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;layout&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;template&amp;#39;&lt;/span&gt;) &lt;span style="color:#75715e"&gt;?&amp;gt;&lt;/span&gt;

&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt; $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;title&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;User Profile&amp;#39;&lt;/span&gt; &lt;span style="color:#75715e"&gt;?&amp;gt;&lt;/span&gt;

&amp;lt;&lt;span style="color:#f92672"&gt;h1&lt;/span&gt;&amp;gt;User Profile&amp;lt;/&lt;span style="color:#f92672"&gt;h1&lt;/span&gt;&amp;gt;
&amp;lt;&lt;span style="color:#f92672"&gt;p&lt;/span&gt;&amp;gt;Hello, &lt;span style="color:#75715e"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;$this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;e&lt;/span&gt;($this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;name&lt;/span&gt;)&lt;span style="color:#75715e"&gt;?&amp;gt;&lt;/span&gt;&amp;lt;/&lt;span style="color:#f92672"&gt;p&lt;/span&gt;&amp;gt;
&amp;lt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt;&amp;gt;
&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#66d9ef"&gt;echo&lt;/span&gt; $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;aurahtml&lt;/span&gt;()&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;input&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;array&lt;/span&gt;(
    &lt;span style="color:#e6db74"&gt;&amp;#39;type&amp;#39;&lt;/span&gt;    &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;color&amp;#39;&lt;/span&gt;,
    &lt;span style="color:#e6db74"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;    &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;,
    &lt;span style="color:#e6db74"&gt;&amp;#39;value&amp;#39;&lt;/span&gt;   &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;value&amp;#39;&lt;/span&gt;,
    &lt;span style="color:#e6db74"&gt;&amp;#39;attribs&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;array&lt;/span&gt;(),
    &lt;span style="color:#e6db74"&gt;&amp;#39;options&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;array&lt;/span&gt;(),
));

&lt;span style="color:#75715e"&gt;// &amp;lt;input type=&amp;#34;color&amp;#34; name=&amp;#34;name&amp;#34; value=&amp;#34;value&amp;#34; /&amp;gt;
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;echo&lt;/span&gt; $this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;html&lt;/span&gt;()&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;input&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;array&lt;/span&gt;(
    &lt;span style="color:#e6db74"&gt;&amp;#39;type&amp;#39;&lt;/span&gt;    &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;date&amp;#39;&lt;/span&gt;,
    &lt;span style="color:#e6db74"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;    &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;name&amp;#39;&lt;/span&gt;,
    &lt;span style="color:#e6db74"&gt;&amp;#39;value&amp;#39;&lt;/span&gt;   &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;value&amp;#39;&lt;/span&gt;,
    &lt;span style="color:#e6db74"&gt;&amp;#39;attribs&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;array&lt;/span&gt;(),
    &lt;span style="color:#e6db74"&gt;&amp;#39;options&amp;#39;&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&amp;gt;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;array&lt;/span&gt;(),
));

&lt;span style="color:#75715e"&gt;// &amp;lt;input type=&amp;#34;date&amp;#34; name=&amp;#34;name&amp;#34; value=&amp;#34;value&amp;#34; /&amp;gt;
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;&lt;span style="color:#75715e"&gt;?&amp;gt;&lt;/span&gt;
&amp;lt;/&lt;span style="color:#f92672"&gt;div&lt;/span&gt;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="layout-template"&gt;Layout Template&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#f92672"&gt;&amp;lt;!--&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;template&lt;/span&gt;&lt;span style="color:#f92672"&gt;.&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;php&lt;/span&gt; &lt;span style="color:#f92672"&gt;--&amp;gt;&lt;/span&gt;

&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;html&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
&lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;head&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&lt;/span&gt;
    &lt;span style="color:#f92672"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;title&lt;/span&gt;&lt;span style="color:#f92672"&gt;&amp;gt;&amp;lt;?=&lt;/span&gt;$this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;title&lt;/span&gt;&lt;span style="color:#75715e"&gt;?&amp;gt;&lt;/span&gt;&amp;lt;/&lt;span style="color:#f92672"&gt;title&lt;/span&gt;&amp;gt;
&amp;lt;/&lt;span style="color:#f92672"&gt;head&lt;/span&gt;&amp;gt;

&amp;lt;&lt;span style="color:#f92672"&gt;body&lt;/span&gt;&amp;gt;

&lt;span style="color:#75715e"&gt;&amp;lt;?&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;$this&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;content&lt;/span&gt;()&lt;span style="color:#75715e"&gt;?&amp;gt;&lt;/span&gt;

&amp;lt;/&lt;span style="color:#f92672"&gt;body&lt;/span&gt;&amp;gt;
&amp;lt;/&lt;span style="color:#f92672"&gt;html&lt;/span&gt;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="autoload-extension"&gt;Autoload Extension&lt;/h3&gt;
&lt;p&gt;Make sure AuraHtmlExtension can be autoloaded. We can add in &lt;code&gt;composer.json&lt;/code&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-json" data-lang="json"&gt;    &lt;span style="color:#960050;background-color:#1e0010"&gt;/&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;/&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;r&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;e&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;s&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;t&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;o&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;f&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;t&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;h&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;e&lt;/span&gt; &lt;span style="color:#960050;background-color:#1e0010"&gt;c&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;o&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;d&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;e&lt;/span&gt;    
    &lt;span style="color:#e6db74"&gt;&amp;#34;autoload&amp;#34;&lt;/span&gt;&lt;span style="color:#960050;background-color:#1e0010"&gt;:&lt;/span&gt; {
        &lt;span style="color:#f92672"&gt;&amp;#34;psr-4&amp;#34;&lt;/span&gt;: {
            &lt;span style="color:#f92672"&gt;&amp;#34;&amp;#34;&lt;/span&gt;: &lt;span style="color:#e6db74"&gt;&amp;#34;path/to/aura/html/extension/&amp;#34;&lt;/span&gt;
        }
    }
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="bootstrapping-and-rendering"&gt;Bootstrapping and Rendering&lt;/h3&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-php" data-lang="php"&gt;&lt;span style="color:#75715e"&gt;&amp;lt;?php&lt;/span&gt;
&lt;span style="color:#75715e"&gt;// test.php file
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;require&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;__DIR__&lt;/span&gt; &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;/vendor/autoload.php&amp;#39;&lt;/span&gt;;
$engine &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;\League\Plates\Engine&lt;/span&gt;( &lt;span style="color:#66d9ef"&gt;__DIR__&lt;/span&gt; &lt;span style="color:#f92672"&gt;.&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;/templates&amp;#39;&lt;/span&gt;);

&lt;span style="color:#75715e"&gt;// Create a new template
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;$template &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;\League\Plates\Template&lt;/span&gt;($engine);
$factory &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;\Aura\Html\HelperLocatorFactory&lt;/span&gt;();
$helper &lt;span style="color:#f92672"&gt;=&lt;/span&gt; $factory&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;newInstance&lt;/span&gt;();
$engine&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;loadExtension&lt;/span&gt;(&lt;span style="color:#66d9ef"&gt;new&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;AuraHtmlExtension&lt;/span&gt;($helper));

&lt;span style="color:#75715e"&gt;// Assign a variable to the template
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;$template&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;name&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;Jonathan&amp;#39;&lt;/span&gt;;

&lt;span style="color:#75715e"&gt;// Render the template
&lt;/span&gt;&lt;span style="color:#75715e"&gt;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;echo&lt;/span&gt; $template&lt;span style="color:#f92672"&gt;-&amp;gt;&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;render&lt;/span&gt;(&lt;span style="color:#e6db74"&gt;&amp;#39;profile&amp;#39;&lt;/span&gt;);
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;If you run &lt;code&gt;php test.php&lt;/code&gt; you will see something like this rendered.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4"&gt;&lt;code class="language-html" data-lang="html"&gt;&amp;lt;&lt;span style="color:#f92672"&gt;html&lt;/span&gt;&amp;gt;
&amp;lt;&lt;span style="color:#f92672"&gt;head&lt;/span&gt;&amp;gt;
    &amp;lt;&lt;span style="color:#f92672"&gt;title&lt;/span&gt;&amp;gt;User Profile&amp;lt;/&lt;span style="color:#f92672"&gt;title&lt;/span&gt;&amp;gt;
&amp;lt;/&lt;span style="color:#f92672"&gt;head&lt;/span&gt;&amp;gt;

&amp;lt;&lt;span style="color:#f92672"&gt;body&lt;/span&gt;&amp;gt;


&amp;lt;&lt;span style="color:#f92672"&gt;h1&lt;/span&gt;&amp;gt;User Profile&amp;lt;/&lt;span style="color:#f92672"&gt;h1&lt;/span&gt;&amp;gt;
&amp;lt;&lt;span style="color:#f92672"&gt;p&lt;/span&gt;&amp;gt;
Hello, Jonathan
&amp;lt;/&lt;span style="color:#f92672"&gt;p&lt;/span&gt;&amp;gt;
&amp;lt;&lt;span style="color:#f92672"&gt;div&lt;/span&gt;&amp;gt;
&amp;lt;&lt;span style="color:#f92672"&gt;input&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;type&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;color&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;name&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;name&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;value&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;value&amp;#34;&lt;/span&gt; /&amp;gt;
&amp;lt;&lt;span style="color:#f92672"&gt;input&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;type&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;date&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;name&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;name&amp;#34;&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;value&lt;/span&gt;&lt;span style="color:#f92672"&gt;=&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;value&amp;#34;&lt;/span&gt; /&amp;gt;
&amp;lt;/&lt;span style="color:#f92672"&gt;div&lt;/span&gt;&amp;gt;

&amp;lt;/&lt;span style="color:#f92672"&gt;body&lt;/span&gt;&amp;gt;
&amp;lt;/&lt;span style="color:#f92672"&gt;html&lt;/span&gt;&amp;gt;
&amp;lt;/&lt;span style="color:#f92672"&gt;body&lt;/span&gt;&amp;gt;&amp;lt;/&lt;span style="color:#f92672"&gt;title&lt;/span&gt;&amp;gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Thank you and Happy PhPing!&lt;/p&gt;
</description>
    </item>
    
  </channel>
</rss>