<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/yaf.tutorials.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'es',
  ),
  'this' => 
  array (
    0 => 'yaf.tutorials.quickstart.php',
    1 => 'Inicio r&aacute;pido',
    2 => 'Inicio r&aacute;pido',
  ),
  'up' => 
  array (
    0 => 'yaf.tutorials.php',
    1 => 'Ejemplos',
  ),
  'prev' => 
  array (
    0 => 'yaf.tutorials.php',
    1 => 'Ejemplos',
  ),
  'next' => 
  array (
    0 => 'yaf.tutorials.routes.php',
    1 => 'Rutas personalizadas',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'es',
    'path' => 'reference/yaf/tutorials.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="yaf.tutorials.quickstart" class="section">
  <h2 class="title">Inicio rápido</h2>

 <div class="example" id="example-1">
  <p><strong>Ejemplo #1 Estructura de directorios típica de una aplicación</strong></p>
  <div class="example-contents screen">
<div class="cdata"><pre>
- .htaccess           // Reglas de reescritura
+ public/
  | - index.php       // Punto de entrada de la aplicación
  | + css/
  | + js/
  | + img/
+ conf/
  | - application.ini // Configuración de la aplicación
- application/
  - Bootstrap.php     // Bootstrap
  + controllers/
     - Index.php      // Controlador por defecto
  + views/
     |+ index/
        - index.phtml // Plantilla de vista para la acción por defecto
  + library/          // Bibliotecas
  + models/           // Modelos
  + plugins/          // Plugins
</pre></div>
  </div>
  <div class="example-contents"><p>
   Configure el <code class="literal">DocumentRoot</code> del servidor web apuntando al directorio
   <var class="filename">public</var>, de modo que solo los recursos públicos sean accesibles desde la web.
  </p></div>
 </div>

 <div class="example" id="example-2">
  <p><strong>Ejemplo #2 Estructura de directorios para una aplicación multi-módulo</strong></p>
  <div class="example-contents screen">
<div class="cdata"><pre>
+ public/
+ conf/
+ application/
  + modules/
    + Index/       //módulo por defecto
      + controllers/
      + views/
    + Admin/       //otro módulo
      + controllers/
      + views/
  + library/
  + models/
  + plugins/
  - Bootstrap.php
</pre></div>
  </div>
  <div class="example-contents"><p>
   En una aplicación multi-módulo, cada módulo tiene sus propios directorios
   <code class="literal">controllers</code> y <code class="literal">views</code> bajo
   <code class="literal">application/modules/&lt;NombreModulo&gt;/</code>. Los módulos
   registrados se declaran en
   <a href="yaf.appconfig.php#configuration.yaf.modules" class="link">application.modules</a>.
  </p></div>
 </div>

 <div class="example" id="example-3">
  <p><strong>Ejemplo #3 Punto de entrada</strong></p>
  <div class="example-contents"><p>
   El fichero <var class="filename">index.php</var> del directorio public es el único punto
   de entrada de la aplicación; hay que redirigir todas las peticiones hacia él
   (se puede usar <var class="filename">.htaccess</var> en Apache + mod_php, o el equivalente
   en el servidor web utilizado; véase más abajo).
  </p></div>
   <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
define</span><span style="color: #007700">(</span><span style="color: #DD0000">"APPLICATION_PATH"</span><span style="color: #007700">,  </span><span style="color: #0000BB">dirname</span><span style="color: #007700">(</span><span style="color: #0000BB">dirname</span><span style="color: #007700">(</span><span style="color: #0000BB">__FILE__</span><span style="color: #007700">)));

</span><span style="color: #0000BB">$app  </span><span style="color: #007700">= new </span><span style="color: #0000BB">Yaf_Application</span><span style="color: #007700">(</span><span style="color: #0000BB">APPLICATION_PATH </span><span style="color: #007700">. </span><span style="color: #DD0000">"/conf/application.ini"</span><span style="color: #007700">);
</span><span style="color: #0000BB">$app</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">bootstrap</span><span style="color: #007700">() </span><span style="color: #FF8000">//llama a los métodos bootstrap definidos en Bootstrap.php
 </span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">run</span><span style="color: #007700">();
</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
   </div>

 </div>

 <div class="example" id="example-4">
  <p><strong>Ejemplo #4 Regla de reescritura</strong></p>
  <div class="example-contents screen">
<div class="cdata"><pre>
#para apache (.htaccess)
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule .* index.php

#para nginx
server {
  listen 80;
  server_name domain.com;
  root   document_root;
  index  index.php index.html index.htm;

  location / {
    try_files $uri $uri/ /index.php?$args;
  }
}

#para lighttpd
$HTTP[&quot;host&quot;] =~ &quot;(www.)?domain.com$&quot; {
  url.rewrite = (
     &quot;^/(.+)/?$&quot;  =&gt; &quot;/index.php/$1&quot;,
  )
}
</pre></div>
  </div>
 </div>

 <div class="example" id="example-5">
  <p><strong>Ejemplo #5 Bootstrap</strong></p>
  <div class="example-contents"><p>
   Todo método de la clase <span class="classname"><strong class="classname">Bootstrap</strong></span> cuyo nombre
   comience por <code class="literal">_init</code> es llamado automáticamente, en orden
   de definición, por
   <span class="methodname"><a href="yaf-application.bootstrap.php" class="methodname">Yaf_Application::bootstrap()</a></span>. Cada uno de estos métodos
   recibe la instancia de <span class="classname"><a href="class.yaf-dispatcher.php" class="classname">Yaf_Dispatcher</a></span> como argumento.
   Los métodos con otros nombres no se llaman automáticamente.
  </p></div>
  <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
</span><span style="color: #007700">class </span><span style="color: #0000BB">Bootstrap </span><span style="color: #007700">extends </span><span style="color: #0000BB">Yaf_Bootstrap_Abstract
</span><span style="color: #007700">{
    public function </span><span style="color: #0000BB">_initConfig</span><span style="color: #007700">(</span><span style="color: #0000BB">Yaf_Dispatcher $dispatcher</span><span style="color: #007700">)
    {
        </span><span style="color: #FF8000">// llamado primero
    </span><span style="color: #007700">}

    public function </span><span style="color: #0000BB">_initPlugin</span><span style="color: #007700">(</span><span style="color: #0000BB">Yaf_Dispatcher $dispatcher</span><span style="color: #007700">)
    {
        </span><span style="color: #FF8000">// llamado segundo
    </span><span style="color: #007700">}

    public function </span><span style="color: #0000BB">_initRoute</span><span style="color: #007700">(</span><span style="color: #0000BB">Yaf_Dispatcher $dispatcher</span><span style="color: #007700">)
    {
        </span><span style="color: #FF8000">// llamado tercero
    </span><span style="color: #007700">}
}
</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
  </div>

 </div>

 <div class="example" id="example-6">
  <p><strong>Ejemplo #6 Configuración de la aplicación</strong></p>
  <div class="example-contents"><p>
   <var class="filename">application.ini</var> es el fichero de configuración de la aplicación.
   Se pueden usar en él las constantes definidas en <var class="filename">index.php</var>,
   y las secciones pueden heredar unas de otras.
  </p></div>
   <div class="example-contents">
<div class="inicode"><pre class="inicode">[yaf]
;APPLICATION_PATH es la constante definida en index.php
application.directory=APPLICATION_PATH &quot;/application/&quot;

;la sección product hereda de la sección yaf
[product:yaf]
foo=bar</pre>
</div>
   </div>

 </div>

 <div class="example" id="example-7">
  <p><strong>Ejemplo #7 Configuración de la aplicación como array PHP</strong></p>
  <div class="example-contents"><p>
   Además de un fichero de configuración INI, también se puede pasar un array PHP simple
   a <span class="methodname"><a href="yaf-application.construct.php" class="methodname">Yaf_Application::__construct()</a></span> como configuración.
  </p></div>
   <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
$config </span><span style="color: #007700">= array(
    </span><span style="color: #DD0000">"application" </span><span style="color: #007700">=&gt; array(
        </span><span style="color: #DD0000">"directory" </span><span style="color: #007700">=&gt; </span><span style="color: #0000BB">APPLICATION_PATH </span><span style="color: #007700">. </span><span style="color: #DD0000">"/application/"</span><span style="color: #007700">,
    ),
);

</span><span style="color: #0000BB">$app </span><span style="color: #007700">= new </span><span style="color: #0000BB">Yaf_Application</span><span style="color: #007700">(</span><span style="color: #0000BB">$config</span><span style="color: #007700">);
</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
   </div>

 </div>

 <div class="example" id="example-8">
  <p><strong>Ejemplo #8 Controlador por omisión</strong></p>
  <div class="example-contents"><p>
   En Yaf, el controlador por omisión se llama
   <span class="classname"><strong class="classname">IndexController</strong></span>:
  </p></div>
   <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000"><span style="color: #0000BB">&lt;?php
</span><span style="color: #007700">class </span><span style="color: #0000BB">IndexController </span><span style="color: #007700">extends </span><span style="color: #0000BB">Yaf_Controller_Abstract
</span><span style="color: #007700">{
    </span><span style="color: #FF8000">// nombre de acción por defecto
    </span><span style="color: #007700">public function </span><span style="color: #0000BB">indexAction</span><span style="color: #007700">()
    {
        </span><span style="color: #0000BB">$this</span><span style="color: #007700">-&gt;</span><span style="color: #0000BB">getView</span><span style="color: #007700">()-&gt;</span><span style="color: #0000BB">content </span><span style="color: #007700">= </span><span style="color: #DD0000">"Hello World"</span><span style="color: #007700">;
    }
}
</span><span style="color: #0000BB">?&gt;</span></code></pre></div>
   </div>

 </div>

 <div class="example" id="example-9">
  <p><strong>Ejemplo #9 Plantilla de vista por omisión</strong></p>
  <div class="example-contents"><p>
   El script de vista para el controlador/acción por omisión es
   <var class="filename">application/views/index/index.phtml</var>. Yaf incluye
   un pequeño motor de vistas llamado <span class="classname"><a href="class.yaf-view-simple.php" class="classname">Yaf_View_Simple</a></span>,
   cuyas plantillas son scripts PHP simples.
  </p></div>
   <div class="example-contents">
<div class="phpcode"><pre><code style="color: #000000">&lt;html&gt;
 &lt;head&gt;
   &lt;title&gt;Hello World&lt;/title&gt;
 &lt;/head&gt;
 &lt;body&gt;
   <span style="color: #0000BB">&lt;?php </span><span style="color: #007700">echo </span><span style="color: #0000BB">$content</span><span style="color: #007700">;</span><span style="color: #0000BB">?&gt;
</span> &lt;/body&gt;
&lt;/html&gt;</code></pre></div>
   </div>

 </div>

 <div class="example" id="example-10">
  <p><strong>Ejemplo #10 Ejecutar la aplicación</strong></p>
  <div class="example-contents"><p>
   Al apuntar el navegador al dominio configurado
   (p. ej. <code class="literal">http://www.example.com</code>), la respuesta será similar a:
  </p></div>
  <div class="example-contents"><p>Resultado del ejemplo anterior
es similar a:</p></div>
  <div class="example-contents screen">
<div class="cdata"><pre>
&lt;html&gt;
 &lt;head&gt;
   &lt;title&gt;Hello World&lt;/title&gt;
 &lt;/head&gt;
 &lt;body&gt;
   hello world
 &lt;/body&gt;
&lt;/html&gt;
</pre></div>
  </div>
  <blockquote class="note"><p><strong class="note">Nota</strong>: 
   <p class="simpara">
    El ejemplo mínimo anterior también puede generarse con el generador de código de Yaf
    (<var class="filename">tools/cg/yaf_cg</var>), que se distribuye con el
    <a href="https://github.com/laruence/yaf/tree/master/tools/cg" class="link external">&raquo;&nbsp;repositorio
    fuente de Yaf</a>:
   </p>
   <div class="example-contents screen">
<div class="cdata"><pre>
$ cd tools/cg
$ ./yaf_cg -d output_directory [-a application_name] [--namespace]
</pre></div>
   </div>
   <p class="simpara">
    <var class="filename">yaf_cg</var> genera un esqueleto más completo y comentado que el mostrado
    en este tutorial: un punto de entrada <var class="filename">public/</var> con reglas de
    reescritura, un Bootstrap con configuración, plugin y configuración de rutas
    personalizadas, un modelo de ejemplo, un controlador de errores y plantillas de vista.
    Es un buen punto de partida para una aplicación real.
   </p>
  </p></blockquote>
 </div>

 </div><?php manual_footer($setup); ?>