Wie man das Request-Objekt aus der ServiceManger in Zend Framework 2?
Ich bin die Entwicklung einer RESTful-Anwendung, und ich will um eine Fabrik zu bauen, das schafft die richtige ViewModel
( Zend\View\Model\ViewModel
, Zend\View\Model\JsonModel
meine XmlModel
) - Objekt abhängig von der Accept
(z.B. -H 'Accept: application/json'
) parameter im HTTP-request-header. Ich möchte, um dies zu implementieren als callback:
class Module implements ServiceProviderInterface
{
...
public function getServiceConfig() {
try {
return array (
'factories' => array(
'RestViewModel' => function($serviceManager) {
//Here I need the the Request object.
$requestHeadAccept = $requestObject->getHeaders()->get('Accept')->toString();
$return = null;
if (strpos($requestHeadAccept, 'application/json') != -1) {
$return = new JsonModel(array('data' => $data));
} elseif (strpos($requestHeadAccept, 'application/xml') != -1) {
...
} else {
...
}
return $return;
}
)
);
} catch (\Exception $e) {
...
}
}
...
}
Wie bekomme ich die Request
Objekt an dieser Stelle?
InformationsquelleAutor automatix | 2013-06-18
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die kurze Antwort: der Antrag ist zugelassen als
Request
:Jedoch, was man erreichen will ist nicht ein Stück, das gehört zum service-manager-Fabriken. Es ist ein Kontext-abhängiger Fabrik in der Steuerung notwendig-Domäne. Deshalb würde ich erstellen ist als ein controller-plugin.
Und um ehrlich zu sein, dieses feature ist bereits in ZF2 über einen vorhandenen controller plugin namens
acceptableViewModelSelector
. Ein Beispiel ist bei der manuellen aber dies wäre ein Szenario, in deinem Fall:Dann erhalten Sie entweder eine
JsonModel
,XmlModel
oder standardmäßig dieViewModel
.Accept
Werte? Ich habe einfach versuchtapplication/foobar
aus und bekam eineZend\View\Model\ViewModel
Objekt und einZend\View\Exception\RuntimeException
(geworfen/vendor/ZF2/library/Zend/View/Renderer/PhpRenderer.php:499
). Wie sollen Fälle behandelt werden, wenn der HTTP-request-header enthält eine nicht ordnungsgemäßeAccess
Wert?Ich denke, das ist eine andere Frage, aber hier geht es: 1) Sie bekommen eine ViewModel-standardmäßig, wenn keine korrekte übereinstimmung gefunden werden kann. Dies ist, was Sie wollen, richtig? Und 2) Was ist die Ausnahme und warum wird es ausgelöst? Können Sie das klären?
Ich sehe die Ausnahme nun, es geht um das template nicht gefunden werden kann. Wenn Sie wieder eine
ViewModel
dann ein rendering mit einer phtml-Datei, wird die Rückkehr html in der Antwort. So, die Rückgabe einem view-Modell bedeutet, dass Sie benötigen ein template gerendert werden. Sie verändern das Verhalten, nicht zurückzukehren, eine standard-ViewModel, aber zum Beispiel standard Sie wieder eine JSON-Modell. Ist es das, was Sie brauchen?InformationsquelleAutor Jurian Sluiman
Erstellen und Registrieren Alternate Rendering und Bewältigungsstrategien
http://framework.zend.com/manual/2.0/en/modules/zend.view.quick-start.html#creating-and-registering-alternate-rendering-and-response-strategies
Nicht sicher, ob ich verstehe deine Frage richtig, aber ich werde es mal ausprobieren. In Sie module.config.php add key 'Strategien' => array('ViewJsonStrategy'). dann ist dein Modul jetzt weiß, nicht mit einem view Skript für jede JsonModels zurückgegeben. überprüfen Sie die blog - spabby.github.io/zend-framework-2-REST
InformationsquelleAutor Haver