Я создаю новый блок, и я хочу передать определенную переменную экземпляру блока при добавлении.
В моем контроллере у меня есть следующее:
// 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
. Какие-либо предложения? Спасибо!
— РЕДАКТИРОВАТЬ —
Из конкретной документации:
// 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 / edit / view – вам не нужно его получать изнутри объект контроллера. Поэтому просто вызовите <?php echo $hasMap; ?>
<?php echo $hasMap; ?>
в вашем файле add.php, а не $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
поля hasMap
в db.
Спасибо за все входные данные. Надеюсь, это поможет кому-то еще!