1

I am attempting to emit and receive PSR-7 style responses in Symfony 3.2.6 I have been attempting to follow the original post from dunglas on the subject which makes it seem rather simple. using-psr-7-in-symfony

I have added

"symfony/psr-http-message-bridge": "v1.0.0", "zendframework/zend-diactoros": "1.3.10"

to my composer.json

and my controller is the following:

namespace AppBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Zend\Diactoros\Response;

class DefaultController extends Controller
{

    public function isAllowedAction()
    {
        $rep = ['status' => 1, 'message' => 'access granted'];
        $response = new Response();
        $response->getBody()->write(json_encode($rep));
        return $response;
    }
}

When I try this, I get the following exception in the browser: The controller must return a response (Object(Zend\Diactoros\Response) given).

I thought that the Zend\Diactoros\Response object should be compatible per the example in the article. It references the sensio/framework-extra-bundle as making it possible so I'm wondering if there is a config I'm missing.

fafnirbcrow
  • 270
  • 3
  • 8
  • Are you sure you have the SensioFrameworkExtraBundle (included in the Symfony Standard Edition) installed and activated in AppKernel? – Cerad Mar 28 '17 at 15:33
  • Yep, checked the AppKernel file and it was part of the registerBundles 'new Sensio\Bundle\FrameworkExtraBundle\SensioFrameworkExtraBundle(),' – fafnirbcrow Mar 28 '17 at 15:41
  • I made a new project and the psr7 bridge worked as expected. I ran composer require symfony/psr-http-message-bridge and composer require zendframework/zend-diactoros Ended up with the same versions. Try running php bin/console debug:event-dispatcher kernel.view and see if you have a PsrResponseListener – Cerad Mar 28 '17 at 16:41
  • This is a new project and the first piece other than doctrine migrations ive added, so it should be clean otherwise. Ran the command suggested and got Sensio\Bundle\FrameworkExtraBundle\EventListener\TemplateListener::onKernelView() as priority 0, which I think is what I would expect. Were a bit further into the bowels of symfony than I regularly go. – fafnirbcrow Mar 28 '17 at 16:45
  • 1
    You should have had: Sensio\Bundle\FrameworkExtraBundle\EventListener\PsrResponseListener::onKernelView() as well. Which explains why the bridge is not working. Make sure the cache was cleared and all that good stuff. – Cerad Mar 28 '17 at 17:01
  • So your comment before led me to see that exact thing that that listener should exist. I had cleared cache before and it didn't, but now it did. So problem is solved. Thank you greatly! – fafnirbcrow Mar 28 '17 at 17:08

0 Answers0