Controller-Weiterleitung - ist ein großer Vorteil, und ich habe Widget-Konzeption damit gemacht. Aber standardmäßig kann der Controller des Nicht-Selbst-Moduls nicht gesendet werden. So beheben Sie dieses Problem, habe ich abstaract_factory für Controller constructon (und auch contoller Konfiguration überhaupt zu vermeiden):Zend2 - wie weiter andere Modul-Controller?
namespace Engine\Mvc\Controller;
use Zend\ServiceManager\AbstractFactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
class Autoloader implements AbstractFactoryInterface
{
public function canCreateServiceWithName(ServiceLocatorInterface $locator, $name, $requestedName)
{
return true;
}
public function createServiceWithName(ServiceLocatorInterface $locator, $name, $requestedName)
{
$class = ucfirst(str_replace('/', '\\', $requestedName)).'Controller';
if (!class_exists($class)){
return false;
}
return new $class;
}
}
/*In Module class*/
public function getControllerConfig()
{
return array(
'abstract_factories' => array(
'Engine\Mvc\Controller\Autoloader'
),
);
}
Es funktioniert gut. Aber nur für aufrufbare Controller - ohne Konstruktorargumente. Wenn ich versuche, Controller aus dem Modul einzubetten, dass ich nicht ändern kann (ZfcUser, mit dem Komponisten installiert, zum Beispiel) - kann es fehlschlagen, weil im diesem Fall entweder Controller nicht aufrufbaren init haben:
/*in zfc-user/module.config.php */
'controllers' => array(
'factories' => array(
'zfcuser' => 'ZfcUser\Factory\Controller\UserControllerFactory',
),
),
/*factory for controller*/
class UserControllerFactory implements FactoryInterface
{
/**
* Create controller
*
* @param ControllerManager $serviceLocator
* @return UserController
*/
public function createService(ServiceLocatorInterface $controllerManager)
{
/* @var ServiceLocatorInterface $serviceLocator */
$serviceLocator = $controllerManager->getServiceLocator();
$userService = $serviceLocator->get('zfcuser_user_service');
$registerForm = $serviceLocator->get('zfcuser_register_form');
$loginForm = $serviceLocator->get('zfcuser_login_form');
$options = $serviceLocator->get('zfcuser_module_options');
$controller = new UserController($userService, $options, $registerForm, $loginForm);
return $controller;
}
}
Froward in module1 nicht UserControllerFactory
von ZfcUser Modul, es versuchen, Controller mit meinem abstract_factory zu konstruieren, und gibt einen Fehler, weil UserController alle Argumente benötigt.
Es kann durch das Vertauschen von Zend\Mvc\Controller\Plugin\Service\ForwardFactory
auflösen - müssen nur Forward mit "global" ControllerManager
erstellen. Aber ich bin mir nicht sicher, "global" ControllerManager
ist in Zend2 vorhanden.
Fragen:
- Gibt es globale Controller, wie kann ich es von Servicemanager?
- Alle anderen Möglichkeiten zum Versand mit Controller-Plugin weiterleiten Nicht-Selbst-Modul-Controller (mit Aufbau von Controllern durch Nicht-Selbst-Modul-Controller-Konfiguration)?
siehe [link] (http://stackoverflow.com/questions/14180839/is-it-possible-to-forward-data-to-another-controller -aktion-in-zend-2) –