В симфонии я называю действие, и я хочу, чтобы это возвратило json jQuery frontend.
Учебное руководство Jobeet преподает, как возвратить частичное, но я хочу возвратить json, не частичное.
Если это обычное действие AJAX, из которого вы его возвращаете, я думаю, что где-то в прошлом я использовал следующее:
return $this->renderText(json_encode($something));
Дешевый способ:
function executeSomethingThatReturnsJson(){
$M = new Model();
$stuff = $M->getStuff();
echo json_encode($stuff);
die(); //don't do any view stuff
}
Более умный способ:
Более умный способ - создать хороший подкласс sfActions, который помогает работать с json-стаффом.
В проекте, который я делал недавно, я создал приложение под названием 'api' (./symfony generate:application api
)
и затем создал файл типа:
api/lib/apiActions.class.php
<?PHP
class apiActions extends sfActions {
public function returnJson($data){
$this->data = $data;
if (sfConfig::get('sf_environment') == 'dev' && !$this->getRequest()->isXmlHttpRequest()){
$this->setLayout('json_debug');
$this->setTemplate('json_debug','main');
}else{
$this->getResponse()->setHttpHeader('Content-type','application/json');
$this->setLayout('json');
$this->setTemplate('json','main');
}
}
}
Обратите внимание, что я явно задал там шаблон.
Так что мой шаблон jsonSuccess.php выглядит просто:
<?PHP echo json_encode($data);
В то время как json_debugSuccess.php делает вещи красивее:
<?PHP var_dump($data); ?>
Затем вы можете иметь контроллер, расширяющий apiActions (вместо обычного sfActions), который выглядит так:
<?php
class myActions extends apiAction {
public function executeList(sfWebRequest $request)
{
$params = array();
if ($request->hasParameter('id')){
$id = $request->getParameter('id');
if (is_numeric($id)){
$params['id'] = $id;
}
}
$data = Doctrine::getTable('SomeTable')->findAll();
$this->returnJson($data);
}
}
Отказ от ответственности: Код выше скопирован/вставлен из приложения, которое у меня есть, но упрощен. Он предназначен только для иллюстрации - но он должен помочь вам двигаться в правильном направлении.