Ejemplo #1 Estructura de directorios típica de una aplicación
- .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
Configure el DocumentRoot del servidor web apuntando al directorio
public, de modo que solo los recursos públicos sean accesibles desde la web.
Ejemplo #2 Estructura de directorios para una aplicación multi-módulo
+ public/
+ conf/
+ application/
+ modules/
+ Index/ //módulo por defecto
+ controllers/
+ views/
+ Admin/ //otro módulo
+ controllers/
+ views/
+ library/
+ models/
+ plugins/
- Bootstrap.php
En una aplicación multi-módulo, cada módulo tiene sus propios directorios
controllers y views bajo
application/modules/<NombreModulo>/. Los módulos
registrados se declaran en
application.modules.
Ejemplo #3 Punto de entrada
El fichero index.php del directorio public es el único punto de entrada de la aplicación; hay que redirigir todas las peticiones hacia él (se puede usar .htaccess en Apache + mod_php, o el equivalente en el servidor web utilizado; véase más abajo).
<?php
define("APPLICATION_PATH", dirname(dirname(__FILE__)));
$app = new Yaf_Application(APPLICATION_PATH . "/conf/application.ini");
$app->bootstrap() //llama a los métodos bootstrap definidos en Bootstrap.php
->run();
?>Ejemplo #4 Regla de reescritura
#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["host"] =~ "(www.)?domain.com$" {
url.rewrite = (
"^/(.+)/?$" => "/index.php/$1",
)
}
Ejemplo #5 Bootstrap
Todo método de la clase Bootstrap cuyo nombre
comience por _init es llamado automáticamente, en orden
de definición, por
Yaf_Application::bootstrap(). Cada uno de estos métodos
recibe la instancia de Yaf_Dispatcher como argumento.
Los métodos con otros nombres no se llaman automáticamente.
<?php
class Bootstrap extends Yaf_Bootstrap_Abstract
{
public function _initConfig(Yaf_Dispatcher $dispatcher)
{
// llamado primero
}
public function _initPlugin(Yaf_Dispatcher $dispatcher)
{
// llamado segundo
}
public function _initRoute(Yaf_Dispatcher $dispatcher)
{
// llamado tercero
}
}
?>Ejemplo #6 Configuración de la aplicación
application.ini es el fichero de configuración de la aplicación. Se pueden usar en él las constantes definidas en index.php, y las secciones pueden heredar unas de otras.
[yaf] ;APPLICATION_PATH es la constante definida en index.php application.directory=APPLICATION_PATH "/application/" ;la sección product hereda de la sección yaf [product:yaf] foo=bar
Ejemplo #7 Configuración de la aplicación como array PHP
Además de un fichero de configuración INI, también se puede pasar un array PHP simple a Yaf_Application::__construct() como configuración.
<?php
$config = array(
"application" => array(
"directory" => APPLICATION_PATH . "/application/",
),
);
$app = new Yaf_Application($config);
?>Ejemplo #8 Controlador por omisión
En Yaf, el controlador por omisión se llama IndexController:
<?php
class IndexController extends Yaf_Controller_Abstract
{
// nombre de acción por defecto
public function indexAction()
{
$this->getView()->content = "Hello World";
}
}
?>Ejemplo #9 Plantilla de vista por omisión
El script de vista para el controlador/acción por omisión es application/views/index/index.phtml. Yaf incluye un pequeño motor de vistas llamado Yaf_View_Simple, cuyas plantillas son scripts PHP simples.
<html>
<head>
<title>Hello World</title>
</head>
<body>
<?php echo $content;?>
</body>
</html>Ejemplo #10 Ejecutar la aplicación
Al apuntar el navegador al dominio configurado
(p. ej. http://www.example.com), la respuesta será similar a:
Resultado del ejemplo anterior es similar a:
<html> <head> <title>Hello World</title> </head> <body> hello world </body> </html>
Nota:
El ejemplo mínimo anterior también puede generarse con el generador de código de Yaf (tools/cg/yaf_cg), que se distribuye con el » repositorio fuente de Yaf:
$ cd tools/cg $ ./yaf_cg -d output_directory [-a application_name] [--namespace]yaf_cg genera un esqueleto más completo y comentado que el mostrado en este tutorial: un punto de entrada public/ 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.