生成 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函数一样,当你在它后面有其他参数时,你不能在传递的变量中有一个空参数。
所以对于你的问题,你有两个选择;
- 将
filename2
参数放在路由的末尾,使其成为可选的
- 保持
filename2
不变,但给它一个默认值。
如果您选择选项 2,示例路线为;
/**
* @Route("/workorder/mail/{from}/{adres}/{subject}/{name}/{filename}/{filename2}/{workOrderId}", name="mail", defaults={"filename2" = 0})
*/
更多关于带参数路由的信息可以found here in the Symfony docs。
我在 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函数一样,当你在它后面有其他参数时,你不能在传递的变量中有一个空参数。
所以对于你的问题,你有两个选择;
- 将
filename2
参数放在路由的末尾,使其成为可选的 - 保持
filename2
不变,但给它一个默认值。
如果您选择选项 2,示例路线为;
/**
* @Route("/workorder/mail/{from}/{adres}/{subject}/{name}/{filename}/{filename2}/{workOrderId}", name="mail", defaults={"filename2" = 0})
*/
更多关于带参数路由的信息可以found here in the Symfony docs。