在一个Symfony Controller操作中生成许多URL

时间:2017-07-27 10:11:47

标签: php symfony

我有一个带有注释路线的动作,以及#34; showAllLinks"

    /**  
    * @param Request $request  
    * @return Response  
    * @Route("/showAllLinks/")
    **/

当访问该操作时,我想为我在同一个控制器中编写的其他几个动作生成URL(相对和绝对)。那可能吗?到目前为止,我已尝试生成几个URL并将其推送到数组中,然后将其包含在响应中,但从我看到的情况来看,Symfony要么是要求

The Response content must be a string or object implementing __toString(), "array" given.

见下面的行动:

public function showAllLinksAction(Request $request)
{
    $linksArr = [];
    $url1 = $this->generateUrl('helloWorld', [], 302, UrlGeneratorInterface::ABSOLUTE_URL);
    $linksArr[] = $url1;
    $url2 = $this->generateUrl('goodbye', [], 302, UrlGeneratorInterface::ABSOLUTE_URL);
    $linksArr[] = $url2;
    $url3 = $this->generateUrl('welcome', [], 302, UrlGeneratorInterface::ABSOLUTE_URL);
    $linksArr[] = $url3;
    $url4 = $this->generateUrl('welcome', [], 302, UrlGeneratorInterface::ABSOLUTE_URL);
    $linksArr[] = $url4;

    return new Response($linksArr);
}

1 个答案:

答案 0 :(得分:0)

您正在将数组传递给响应对象,您应该传递一个字符串。这些是响应对象的参数,来自Symfony文档:

use Symfony\Component\HttpFoundation\Response;

$response = new Response(
    'Content',
    Response::HTTP_OK,
    array('content-type' => 'text/html')
);

我认为你可以使用

$response = new Response('Content');

$response = new Response();
$response->setContent('Content');

在任何情况下,'Content'参数都是一个字符串。您正在尝试设置$ linksArr,这是一个数组。这应该可行,但可能不是您想要实现的结果:

return new Response(implode(",", $linksArr));