PHP 8.6.0 Beta 3 is available for testing

La clase Yaf_Plugin_Abstract

(Yaf >=1.0.0)

Introducción

Los plugins permiten extender y personalizar el framework de forma sencilla. Un plugin es una clase que extiende Yaf_Plugin_Abstract y sobreescribe uno o más métodos gancho, que se llaman automáticamente en puntos fijos del ciclo de despacho: antes y después del enrutamiento, antes y después del bucle de despacho, y antes y después de cada despacho individual.

Un plugin se registra en el despachador con Yaf_Dispatcher::registerPlugin(), normalmente en el Bootstrap. Después del registro, todos los métodos gancho que implementa el plugin se llaman en el momento adecuado, recibiendo cada uno las instancias actuales de Yaf_Request_Abstract y Yaf_Response_Abstract.

Ejemplos

Ejemplo #1 Plugin example

<?php
   /* la clase de arranque debería estar definida bajo ./application/Bootstrap.php */
   class Bootstrap extends Yaf_Bootstrap_Abstract {
        public function _initPlugin(Yaf_Dispatcher $dispatcher) {
            /* register a plugin */
            $dispatcher->registerPlugin(new TestPlugin());
        }
   }

   /* la clase complemento debería estar ubicada bajo ./application/plugins/ */
   class TestPlugin extends Yaf_Plugin_Abstract {
        public function routerStartup(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response) {
            /* antes del enrutador
                              en este hook, el usuario puede hacer alguna reescritura de la url */
            var_dump("routerStartup");
        }
        public function routerShutdown(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response) {
            /* router complete
               en este hook, el usuario puede hacer un control de acceso */
            var_dump("routerShutdown");
        }
        public function dispatchLoopStartup(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response) {
            var_dump("dispatchLoopStartup");
        }
        public function preDispatch(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response) {
            var_dump("preDispatch");
        }
        public function postDispatch(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response) {
            var_dump("postDispatch");
        }
        public function dispatchLoopShutdown(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response) {
            /* último hook
                              en este hook el usuario puede hacer el registro o implementar el diseño */
            var_dump("dispatchLoopShutdown");
        }
   }

   Class IndexController extends Yaf_Controller_Abstract {
        public function indexAction() {
            return FALSE; //prevent rendering
        }
   }

   $config = array(
       "application" => array(
           "directory" => dirname(__FILE__) . "/application/",
       ),
   );

   $app = new Yaf_Application($config);
   $app->bootstrap()->run();
?>

Resultado del ejemplo anterior es similar a:

string(13) "routerStartup"
string(14) "routerShutdown"
string(19) "dispatchLoopStartup"
string(11) "preDispatch"
string(12) "postDispatch"
string(20) "dispatchLoopShutdown"

Sinopsis de la clase

class Yaf_Plugin_Abstract {
/* Métodos */
public function postDispatch(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response): void
public function preDispatch(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response): void
public function preResponse(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response): void
public function routerShutdown(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response): void
public function routerStartup(Yaf_Request_Abstract $request, Yaf_Response_Abstract $response): void
}

Tabla de contenidos

add a note

User Contributed Notes 1 note

up
1
gianjason#gmail.com
13 years ago
All the methods which the plugin implemented according to this interface, will be called at the proper time automatically.
To Top