想象一下典型的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
助手之类的内容。
答案 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 - 听起来他们是你的应用程序中的某种配置
通过这种方式,您可以随时随地访问它们