PHP混凝土5将变量传递到Add.PHP


PHP Concrete 5 Pass Variables to Add.php

我正在创建一个新块,我想在添加时将定义的变量传递给块实例。

在我的控制器中,我有以下内容:

// 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字段中提取现有编号。

感谢所有的投入。希望这能帮助其他人!