Ganz einfach:
im Controller folgende Klassenvariable setzen:
protected $supportedFormats = array("html", "json"); protected $viewFormatToObjectNameMap = array( "json" => "\TYPO3\FLOW3\MVC\View\JsonView", "html" => "\TYPO3\Fluid\View\TemplateView" );
und in der Routes.yml (bzw. im Routing) einen Eintrag nach folgendem Muster vornehmen:
- name: '[name_der_route]' uriPattern: '[gewünschter_pfad]' defaults: '@package': '[package_name]' '@action': '[action_im_controller]' '@controller': '[controller]' '@format': 'json'
Mit der Klassenvariable sorgt ihr dafür, dass der Controller beim Format “json” auf ein Template verzichtet und den Return-Value einer Action direkt ausgibt (also im Normalfall per json_encode() formatiert). Mit der Konfiguration der Route legt ihr nur noch fest, dass die jeweilige Action an Stelle von HTML lieber JSON verwendet.
[Update]
Nach der Frage von Mario hier nochmal als Nachtrag eine entsprechende Beispiel-Action:
/** * * @param string $param * * @return json test data */ public function getDataAction($param) { $data = array("testKey"=>$param, "testKey2"=>"testValue2"); return json_encode($data); }