У меня есть служба symfony2 для экспорта базы данных в файл CSV, что делает ее доступной для.
Я получил эту ошибку:
The controller must return a response ( null given ) . Did you forget to add a return statement somewhere in your controller?
Я не понимаю, почему. Не могли бы вы просветить меня по этому поводу?
Мой код:
namespace Rac\CaraBundle\Manager; /* Imports */ use Symfony\Component\PropertyAccess\PropertyAccess; use Symfony\Component\Validator\ValidatorInterface; use Symfony\Component\EventDispatcher\EventDispatcherInterface; use Doctrine\Common\Persistence\ObjectManager; use Symfony\Component\HttpFoundation\StreamedResponse; /* Local Imports */ use Rac\CaraBundle\Entity\Contact; /** * Class CSV Contact Importer * */ class CSVContactImporterManager { /** * @var ObjectManager */ private $om; /** * @var EventDispatcherInterface */ private $eventDispatcher; /** * @var ValidatorInterface */ private $validator; /** * @var ContactManager */ private $contactManager; /** * @param EventDispatcherInterface $eventDispatcher * @param ObjectManager $om * @param Contact $contactManager * */ public function __construct( EventDispatcherInterface $eventDispatcher, ObjectManager $om, ValidatorInterface $validator, ContactManager $contactManager ) { $this->eventDispatcher = $eventDispatcher; $this->om = $om; $this->validator = $validator; $this->contactManager = $contactManager; } public function getExportToCSVResponse() { // get the service container to pass to the closure $contactList = $this->contactManager->findAll(); $response = new StreamedResponse(); $response->setCallback( function () use ($contactList) { //Import all contacts $handle = fopen('php://output', 'r+'); // Add a row with the names of the columns for the CSV file fputcsv($handle, array('Nom', 'Prénom', 'Société', 'Position', 'Email', 'Adresse', 'Téléphone', 'Téléphone mobile'), "\t"); $header = array(); //print_r($contactList); foreach ($contactList as $row) { fputcsv($handle, array( $row->getFirstName(), $row->getLastName(), $row->getCompany(), $row->getPosition(), $row->getEmail(), $row->getAddress(), $row->getPhone(), $row->getMobile(), ), "\t"); } fclose($handle); } ); $response->headers->set('Content-Type', 'application/force-download'); $response->headers->set('Content-Disposition', 'attachment; filename="export.csv"'); return $response; }
И мой контроллер:
use Rac\CaraBundle\Entity\Contact; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method; use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; use Symfony\Component\HttpFoundation\Request; use UCS\Bundle\RichUIBundle\Controller\BaseController; use UCS\Bundle\RichUIBundle\Serializer\AbstractListSerializer; /** * Contact BackOffice Environment Controller. * * * * @Route("/contact_environment") */ class ContactEnvironmentController extends BaseController{ /* My code here..*/ /** * @Route("/export", name="contact_environment_export",options={"expose"=true}) * @Method("GET") * * @return type */ public function exort(){ $manager = $this->get("cara.csv_contact_importer_manager"); $manager->getExportToCSVResponse(); } }
В вашем контроллере вам нужно вернуть значение из getExportToCSVResponse()
.
public function exort(){ $manager = $this->get("cara.csv_contact_importer_manager"); return $manager->getExportToCSVResponse(); }