1

我试图将 url 从当前页面传递给控制器​​,但它没有显示完整的 url。

EX,http://xxxxxx.localhost/cards/card_list/page:2当我在控制器中回显它时,它会显示xxxxxx.localhost。我知道是因为("/" ":" )...等特殊字符。

我的项目目的是在控制器完成工作后将带有表单的 url 传递给控制器​​,我会将其重定向到当前页面。

card_list(查看)

<?php echo $url5 = urlencode(Router::url($this->here, true)); ?>
<?php echo $form->create('CardSaleAll', array('url'=> array('controller' => 'cards', 'action' => 'complete_sale_card', $url5)));?>
<input type="hidden" name="data[CardSaleAll][sale_card_id]" value="'+id+'"> 
<?php echo $form->submit('Submit', array('alt' => '売却','type' => 'image', 'src' => '../../img/btn_52.png', 'style' => 'width: 307px;'));?>

卡片(控制器)=> complete_sale_all(动作)

function complete_sale_card($url5){
    echo $url5;
    exit();
}
4

2 回答 2

1

试试下面的

$this->request->url

上面应该包含 URL 作为当前视图请求的一部分。

于 2013-07-05T07:28:43.917 回答
0

使用贪心明星路线

通常,正斜杠表示参数分隔符:

即 url/controller/action/one/two/three/four映射到以下变量:

function action ($one, $two, $three, $four) {
}

如果您想$one包含动作名称后面的所有内容(在上面的示例中),您可以使用greedy-star路由:

Router::connect(
    '/anything/**',
    array('controller' => 'cards', 'action' => 'complete_sale_card')
);

或者让生活变得简单

您可以将其设置为表单字段,而不是在 url 中放置 url:

<?php 
echo $form->create('CardSaleAll', array(
    'action' => 'complete_sale_card'
));
echo $form->input('redirect', array(
    'type'=> 'hidden',
    'value' => $url5
));
?>

不要将原始 html 与表单助手混合

在问题中有这个片段:

<input type="hidden" name="data[CardSaleAll][sale_card_id]" value="'+id+'"> 

除了是一个错误(除非id真的是一个常数),手工编写输入而不是让 cake 为您生成它们是一个坏主意。如果不出意外,因为很容易生成无效标记或允许注入攻击。而是替换为:

echo $this->Form->input('sale_card_id', array('type' => 'hidden'));

或类似的。

不要使用相对网址

在问题中还有这个:

'src' => '../../img/btn_52.png', 'style' => '宽度:307px;'

这也是个坏主意。

这将适用于 url http://xxxxxx.localhost/cards/card_list/(我假设)并且对于 url 失败http://xxxxxx.localhost/cards/card_list(没有尾部斜杠)。

反而:

  1. 在适当的地方使用 css - 这是一个适当的例子
  2. 如果你真的想在你的源代码中放置一个 url,使用它Router::url()来生成正确的绝对url。
于 2013-07-05T08:26:15.070 回答