从CakePHP中的函数内访问View变量

时间:2010-10-26 13:34:18

标签: cakephp

想象一下典型的CakePHP应用程序,其中Controller以典型的方式使用$this->set将各种数据传递到View:

class ThingsController extends AppController {
    function test() {
        $this->set('someparam', 5);
    }
}

如果相应的View要定义并使用输出一些HTML的小辅助函数,有没有办法从函数中访问该变量$some_param?我本以为你可以把它作为一个全局变量来访问它,但它总是带有值NULL

<?php
function helper_function() {
    global $someparam;
    echo var_dump($someparam); // Just prints NULL
}
?>
<h1>I am a View!</h1>
<?php helper_function(); ?>

说实话,一个更简单的用例是helper_function能够访问$html$javascript助手之类的内容。

3 个答案:

答案 0 :(得分:1)

视图不在全局范围内,$this->set()不会使变量可用于全局范围。

如果您希望变量在helper_function()中可用,您应该将其作为参数传递:

function helper_function( $arg )
{
    // Do stuff with $arg here
}

访问其他帮助自定义帮助程序可以执行的操作:

class SomeHelper extends AppHelper 
{
    // Use the same syntax as the controller to add helpers to your custom helper
    var $helpers = array('Html','Javascript','Form');

    // Then in the methods, refer to these other helpers thus:
    function helper_function( $arg )
    {
        $out = '';
        $out .= $this->Html->div('class','text here');

        $this->Javascript->codeBlock("some jQuery here",array('inline'=>false));

        $out .= $this->Form->input('Model.fieldName',array('type'=>'hidden','value'=>$arg));

        return $out;
    }
}

答案 1 :(得分:1)

在您描述的情况下,您将在为视图设置后对该值进行操作。您可能会也可能不会更改该值。无论哪种方式,它都会让人感到困惑。它会更清晰 - 当你忘记这个应用程序如何工作时让生活更轻松 - 做类似

的事情
function test() {
    $myVar = 5;
    $this->helper_function($myVar);
    $this->set('some_param', $myVar);
}

至于访问辅助函数,你可以这样做,有时似乎没有替代方案,但最好尽可能避免它,因为它打破了MVC。

此:

<h1>I am a View!</h1>
<?php helper_function(); ?>

是不对的(假设您已在控制器中编写了该功能)。我将在视图的控制器操作中调用该函数,并将结果作为变量传递出去。试着记住,使用控制器准备视图的数据。使用查看 显示数据。

为什么不写自己的帮手?这似乎是解决问题的方法。

答案 2 :(得分:0)

使用configure :: read和write - 听起来他们是你的应用程序中的某种配置

通过这种方式,您可以随时随地访问它们