【问题标题】:call function from element with parameters从带有参数的元素调用函数
【发布时间】:2015-10-29 16:45:09
【问题描述】:

我正在从我的元素调用控制器的功能。我发送了您需要的参数。我遇到的问题是,在我的元素中,这样的值是 TRUE,但是当驱动程序到达时到达 FALSE,我不明白为什么会发生这种情况。清理临时文件夹和缓存,我再次关闭并打开文件,但什么也没有。我无法确定我来找你的原因是什么问题。我希望你能帮助我。

对元素的调用,我需要的参数是'web'

echo $this->element(
    'atributo_element', 
    array(
        'data'=>$atributo, 
        'eventID'=>$eventID, 
        'format'=>'simple',
        'evento'=>$evento, 
        'input_value'=>$input_value, 
        'setup'=>$setup, 
        'web' => true
    )
);

元素.ctp

print_r($web); // ====> 1
$this->requestAction(
    array(
        'controller'=>'tickets',
        'action'=>'listado',
        'admin'=>false
    ),
    array($eventID, $inscID, $web)
);

控制器

public function listado($evento_id = null, $inscripcion_id = null, $web = false) {
    print_r($web); //=====> false 
    $tickets = $this->Ticket->getTicketsActivos($evento_id, $web);
}

编辑

试图找出错误,奇怪的探针

echo $this->Html->link(array('controller'=>'tickets', 'action'=>'listado', 'admin'=>false),
                                         array($eventID,$inscID, $web));

这实际上将 web 的值打印为 1,但函数从不接收它,因为 1 太奇怪了

【问题讨论】:

    标签: cakephp controller element


    【解决方案1】:

    您为requestAction() 设置的网址不正确。您需要使用'pass' 索引传递第二个数组中的所有路由参数:-

    $this->requestAction(
        array(
            'controller' => 'tickets',
            'action' => 'listado',
            'admin' => false,
        ),
        array(
            'pass' => array(
                $eventID,
                $inscID, 
                $web
            )
        )
    );
    

    您正在做的是将您的控制器操作称为listado(),没有任何参数,所以本质上是listado(null, null, false)

    您使用$this->Html->link() 的示例是错误的,因为传递的参数需要与其他路由器参数在同一个数组中定义,第一个参数作为链接名称:-

    echo $this->Html->link(
        'link',
        array(
            'controller' => 'tickets', 
            'action' => 'listado', 
            'admin' => false,
            $eventID,
            $inscID, 
            $web
        )
    );
    

    值得注意的是,requestAction() 会导致性能下降,如果可能,最好避免使用。

    【讨论】:

    • 首先,感谢您的回答!尝试按照您的指示进行操作,但仍然遇到同样的问题。关于 requestAction,那将是调用该函数的最佳方式吗?
    • requestAction 创建一个额外的服务器请求,这就是不建议这样做的原因(您希望将请求保持在最低限度)。理想情况下,您应该在渲染之前在控制器中为您的视图设置所有内容。
    • 你确定$webtrue
    • 如果我到处打印,到处都是真(或 1)但控制器变为假,这似乎非常罕见,这从未发生在我身上:S
    • 经过各种测试得出 url 对我不起作用的结论,发送布尔数据。用字符串探测数据,一切正常,但这不是我所期望的。让我们忽略 requestAction 并更改代码以使其更好。感谢您的帮助!
    猜你喜欢
    • 2012-09-02
    • 1970-01-01
    • 1970-01-01
    • 2018-10-12
    • 2012-02-26
    • 1970-01-01
    • 1970-01-01
    • 2015-04-30
    • 2015-01-21
    相关资源
    最近更新 更多