生成URL symfony 2空值

时间:2015-01-30 09:00:49

标签: php symfony

我在symfony 2中生成了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' => '',
        '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是可选的。

谢谢!

3 个答案:

答案 0 :(得分:1)

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

  1. filename2参数放在路径的末尾,使其成为可选
  2. 保留filename2,但为其提供默认值。
  3. 如果选择选项2,则示例路线为;

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

    有关带参数的路线的更多信息可以是found here in the Symfony docs

答案 1 :(得分:0)

您不能将空字符串传递给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));

正则表达式是明确的,[^/]++表示“非空字符串,不包含字符/”。

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

/你/真的/长/ URL /与/所有/你/参数?文件名2 =

答案 2 :(得分:0)

    $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' => ''));

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