Předání vlastního objektu formuláři
- saimons
- Člen | 293
Napsal jsem si vlastni tridu. Pro tuto tridu jsem si vytvoril instanci (objekt) a tím se snazim naplnit formular pomoci metody setDefaults(). Mam problem v tom, ze mi to hlasi chybu „Values must be an array, object given.“ Pritom, kdyz jsem si vypsal vrácenou promennou, ta vypada nasledovne (zda se mi stejna jako vraci DibiRow):
<?php
Admin_BlokyEditModels(7) {
"nadpis1" private => "Kdo jsme" (8)
"barvaID1" private => "2"
"nadpis2" private => "a co děláme" (13)
"barvaID2" private => "1"
"nadpis3" private => NULL
"barvaID3" private => NULL
"text" private => "<p>Duševní" (654)
}
?>
Moje vztvorena trida:
<?php
class Admin_BlokyEditModels extends NObject
{
private $nadpis1;
private $barvaID1;
private $nadpis2;
private $barvaID2;
private $nadpis3;
private $barvaID3;
private $text;
public function __construct() {
}
public function nacti1BlokText($blokTextID) {
$connection = dibi::getConnection();
$results = $connection->query('
SELECT bt.text, rn.nadpis, rn.barvaID
FROM radeknadpis rn, radeknadpistext rnt, bloktext bt
WHERE bt.blokTextID = %i',$blokTextID,'
AND bt.blokTextID = rnt.blokTextID
AND rnt.radekNadpisID = rn.radekNadpisID
ORDER BY rn.pozice ASC
');
$i = 1;
foreach ($results AS $result) {
if($i == 1) {
$this->nadpis1 = $result->nadpis;
$this->barvaID1 = $result->barvaID;
}
if($i ==2) {
$this->nadpis2 = $result->nadpis;
$this->barvaID2 = $result->barvaID;
}
if($i == 3) {
$this->nadpis3 = $result->nadpis;
$this->barvaID3 = $result->barvaID;
}
$i++;
}
$result2 = $connection->query('
SELECT bt.text
FROM bloktext bt
WHERE bt.blokTextID = %i',$blokTextID)->fetch();
$this->text = $result2->text;
return $this;
}
}
?>
Predani dat do formulare:
<?php
public function renderEditText($blokTextID) {
$bloky = new Admin_BlokyEditModels();
$form = $this['blokTextForm'];
$result = $bloky->nacti1BlokText($blokTextID);
NDebug::dump($result);
$form->setDefaults($result);
}
?>
Editoval saimons (24. 11. 2010 8:05)
- sodae
- Nette Evangelist | 250
špatná implementace DibiResult, ta nemá implementaci array (pouze má
iteraci), takže musíš výstup přetypovat na array a to bud v setDefaults od
formuláře nebo u return od metody modelu
Edit: špatné pochopení kodu
Nette\Object nemá implementaci array, tedy si musíš implementovat
Editoval sodae (23. 11. 2010 20:45)
- saimons
- Člen | 293
Aha, tak uz jsem to asi pochopil, diky za radu nakonec jsem to teda udelal takto:
<?php
class Admin_BlokyEditModels extends NObject {
private $connection;
private $pole = array();
public function __construct() {
$this->connection = dibi::getConnection();
}
public function getPole() {
return $this->pole;
}
public function nacti1BlokText($blokTextID) {
$this->pole[] = ...
}
?>