【问题标题】:Generate URL symfony 2 empty value生成 URL symfony 2 空值
【发布时间】:2015-01-30 09:00:48
【问题描述】:

我在 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 是可选的。

谢谢!

【问题讨论】:

    标签: php symfony


    【解决方案1】:

    路由和普通的 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

    【讨论】:

    • 感谢这是最好的解决方案!
    【解决方案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' => 'something',
            'workOrderId' => $id));
    

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

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

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

    【讨论】:

      【解决方案3】:
          $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 参数作为最后一个。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-05-17
        相关资源
        最近更新 更多