生成 URL symfony 2 空值

Generate URL symfony 2 empty value

我在 symfony 2 中生成 url link :

$route = $this->generateUrl('mail', array('from' => $oSender->getSettingValue(),
        'adres' => (empty($aInfo['executorEmail']) ? 'info@blablabla.nl' : $aInfo['executorEmail']),
        'subject' => 'Werkbonnen project ' . $aInfo['projectName'] . ' week ' . $aInfo['workOrderWeeknumber'],
        'name' => $aInfo['executorName'],
        'filename' => $filename,
        'filename2' => '',
        'workOrderId' => $id));

路线注释:

 /**
 * @Route("/workorder/mail/{from}/{adres}/{subject}/{name}/{filename}/{filename2}/{workOrderId}", name="mail")
 * @Template()
 */

以及生成路由所在的函数:

public function mailAction(Request $request, $from = '', $adres = '', $subject = '', $name = '', $filename = '', $filename2 = '', $workOrderId) {
// some code here not important

}

它一直在说:

Parameter "filename2" for route "mail" must match "[^/]++" ("" given) to generate a corresponding URL.

我如何在 symfony 中使用 generateUrl 函数给出一个空值。 变量 filename2 是可选的。

谢谢!

您不能将空字符串传递给 URL 参数。尝试类似的东西:

$route = $this->generateUrl('mail', array('from' => $oSender->getSettingValue(),
        'adres' => (empty($aInfo['executorEmail']) ? 'info@blablabla.nl' : $aInfo['executorEmail']),
        'subject' => 'Werkbonnen project ' . $aInfo['projectName'] . ' week ' . $aInfo['workOrderWeeknumber'],
        'name' => $aInfo['executorName'],
        'filename' => $filename,
        'filename2' => 'something',
        'workOrderId' => $id));

正则表达式很清楚,[^/]++表示"a non empty string that does not contain the character /"。

如果该参数可以为空,则不能将其放入 URL,您必须改用查询字符串:

/your/really/long/url/with/all/your/parameters?filename2=

    $route = $this->generateUrl('mail', array(
        'workOrderId' => $id,
        'from' => $oSender->getSettingValue(),
        'adres' => (empty($aInfo['executorEmail']) ? 'info@blablabla.nl' : $aInfo['executorEmail']),
        'subject' => 'Werkbonnen project ' . $aInfo['projectName'] . ' week ' . $aInfo['workOrderWeeknumber'],
        'name' => $aInfo['executorName'],
        'filename' => $filename,
        'filename2' => ''));

没关系,这对我有用,必须在 url 中最后给出 filename2 参数。

路由和普通的PHP函数一样,当你在它后面有其他参数时,你不能在传递的变量中有一个空参数。
所以对于你的问题,你有两个选择;

  1. filename2参数放在路由的末尾,使其成为可选的
  2. 保持 filename2 不变,但给它一个默认值。

如果您选择选项 2,示例路线为;

/**
 * @Route("/workorder/mail/{from}/{adres}/{subject}/{name}/{filename}/{filename2}/{workOrderId}", name="mail", defaults={"filename2" = 0})
 */

更多关于带参数路由的信息可以found here in the Symfony docs