zend unable the requested framework zend-framework2 zend-framework-mvc zend-framework-modules zend-framework-routing

zend-framework2 - framework - the requested controller was unable to dispatch the request



ZF2: ¿Cómo adjuntar oyente en el evento en la clase Módulo? (1)

Quiero establecer un basePath para que sea el mismo para cada componente de mi Mvc para una solicitud determinada. Quiero decir que cuando llamo a estos métodos quiero obtener el mismo resultado, digamos ''/spam/ham/'' :

echo $this->headLink()->prependStylesheet($this->basePath() . ''/styles.css'') // $this->basePath() has to be ''/spam/ham/'' $this->getServiceLocator() ->get(''viewhelpermanager'') ->get(''headLink'') ->rependStylesheet($this->getRequest()->getBasePath() . ''/styles.css'') // $this->setRequest()->getBasePath() has to be /spam/ham/

Cómo establecer el basePath para el primer caso que he encontrado, esta es mi pregunta . Por cierto, el manual original no tiene ninguna información que recibí de la respuesta.

Y ahora el segundo: el basePath debe establecerse en la Request :

$this->getRequest()->getBasePath()

Aquí encontré una respuesta que, de hecho, no funciona en absoluto http://zend-framework-community.634137.n4.nabble.com/Setting-the-base-url-in-ZF2-MVC-td3946284.html . Como dije aquí StaticEventManager está en desuso, así que lo cambié con SharedEventManager :

// In my Application/Module.php namespace Application; use Zend/EventManager/SharedEventManager class Module { public function init() { $events = new SharedEventManager(); $events->attach(''bootstrap'', ''bootstrap'', array($this, ''registerBasePath'')); } public function registerBasePath($e) { $modules = $e->getParam(''modules''); $config = $modules->getMergedConfig(); $app = $e->getParam(''application''); $request = $app->getRequest(); $request->setBasePath($config->base_path); } } }

Y en mis modules/Application/configs/module.config.php agrego:

''base_path'' => ''/spam/ham/''

Pero no funciona. Los problemas son:

1) La ejecución nunca llega a la función registerBasePath . Pero tiene que hacerlo. He adjuntado un evento con el oyente en la función init .

2) Cuando cambio SharedEventManager para solo EventManager , sucede que llega a la función registerBasePath pero se emite una excepción:

Fatal error: Call to undefined method Zend/EventManager/EventManager::getParam()

¿Qué hago mal? ¿Por qué la ejecución del programa no llega a la función registerBasePath ? Si esta es la única forma de establecer el basePath globalmente, ¿cómo hacerlo bien?


Sé que falta la documentación de este tipo de cosas. Pero estás en el camino para acercarte a esto:

  1. Se temprano (por lo tanto, en el arranque)
  2. Agarra la solicitud de la aplicación
  3. Establecer la ruta base en la solicitud

A los documentos les falta esta información y la publicación a la que se refiere es bastante antigua. La forma más rápida y sencilla de hacerlo es usar el método onBootstrap() :

namespace MyModule; class Module { public function onBootstrap($e) { $app = $e->getApplication(); $app->getRequest()->setBasePath(''/foo/bar''); } }

Si desea tomar la ruta base de su configuración, puede cargar el administrador de servicios allí:

namespace MyModule; class Module { public function onBootstrap($e) { $app = $e->getApplication(); $sm = $app->getServiceManager(); $config = $sm->get(''config''); $path = $config->base_path; $app->getRequest()->setBasePath($path); } }