我正在创建一个新块,我想在添加时将定义的变量传递给块实例。
在我的控制器中,我有以下内容:
// declare the var
public $hasMap = 0;
public function add() {
$this->set('hasMap', $this->generateMapNumber());
}
generateMapNumber()函数如下所示:
public function generateMapNumber() {
return intval(mt_rand(1,time()));
}
在我的add.php表单中,我有一个隐藏的字段:
<?php $myObj = $controller; ?>
<input type="hidden" name="hasMap" value="<?php echo $myObj->hasMap?>" />
当我创建一个新块时,hasMap
总是0
,隐藏的输入值也总是0
。有什么建议吗?非常感谢。
---编辑---
来自混凝土5文件:
// This...
$controller->set($key, $value)
// ... takes a string $key and a mixed $value, and makes a variable of that name
// available from within a block's view, add or edit template. This is
// typically used within the add(), edit() or view() function
在块控制器中调用$this->set('name', $value)
会在相应的添加/编辑/查看文件中设置具有给定值的该名称的变量——您不需要从控制器对象中获取它。因此,只需在add.php文件中调用<?php echo $hasMap; ?>
,而不是$myObj->hasMap
。
它将不是相同的值,因为函数每次调用时都会给出不同的值。
下面是解决方案。在控制器中。。。
public $hasMap = 0;
// no need for this:
// public function add() { }
public function generateMapNumber() {
if (intval($this->hasMap)>0) {
return $this->hasMap;
} else {
return intval(mt_rand(1,time()));
}
}
然后在add.php文件中。。。
<?php $myObj = $controller; ?>
<input type="hidden" name="hasMap" value="<?php echo $myObj->generateMapNumber()?>" />
它工作得很好。添加时会生成一个新编号,编辑时会从数据库中的hasMap
字段中提取现有编号。
感谢所有的投入。希望这能帮助其他人!