addSelect a Nette\ArrayHash Object
- xand
- Člen | 15
Zdravim,
vytahujem z db do pola udaje a vystup print_r() vyzera v pohode:
Array ( [1] => a [2] => b [3] => c )
vlozim ho do addSelect a po odoslani formulara a getValues() je ale premenna z toho selectu prazdna, hoci ked vo formulary <option value=„1“> je.
Ked si vypisem teraz print_r(). mam tam divne –
Nette\ArrayHash Object ( [product] =>
Dakujem za pomoc! :)
- jiri.pudil
- Nette Blogger | 1032
Nette\ArrayHash
je v podstatě stdClass rozšířená o několik šikovných rozhraní. Pokud
chceš, aby ti formulář vrátil hodnoty v obyčejném poli, volej
getValues(TRUE)
.
Prázdnou hodnotu tam máš proto, že jsi v selectu nic nevybral. V tom
případě ti vrátí hodnotu NULL
(kterou print_r()
vypíše jako prázdno).
- xand
- Člen | 15
uz to vracia normalne pole :), ale stale tam je NULL, ako je to mozne? jasne ze vzdy mam vzdy nieco vybrate v selecte
ak pole napisem natvrdo, tak to funguje.
$products = array(
'1' => 'a',
'2' => 'b',
'3' => 'c',
);
ale vystup z databazy mam idetenticky aj takto, no toto vracia NULL
$products = array();
foreach($this->categories->getProducts($category['id']) as $row) {
$products[$row['id']] = $row['name'];
}
- xand
- Člen | 15
public function renderView($url = "")
{
$this->template->category = $this->categories->findByUrl($url);
$category = $this->categories->findByUrl($url);
$this->template->products = $this->categories->getProducts($category['id']);
}
protected function createComponentOrderForm()
{
$url = $this->getHttpRequest()->getUrl();
$split = explode("/", $url);
$url = $split[count($split)-1];
$category = $this->categories->findByUrl($url);
$form = new Form;
$products = array();
foreach($this->categories->getProducts($category['id']) as $row) {
$products[$row['id']] = $row['name'];
}
$form->addSelect('product', 'Product', $products)->setItems($products);
//print_r($products);
$form->addTextArea('note', 'Note:')
->setOption('description', Html::el('p')
->setHtml('some note')
);
$form->addSubmit('save', 'Save')
->setAttribute('class', 'default')
->onClick[] = $this->orderFormSucceeded;
$form->addProtection();
return $form;
}
public function orderFormSucceeded($button)
{
$values = $button->getForm()->getValues(TRUE);
print_r($values); //Array ( ) Array ( [product] => [note] => blabla)
}
a z modelu:
public function findAll()
{
return $this->database->table('categories');
}
public function findById($id)
{
return $this->findAll()->get($id);
}
public function findByUrl($url)
{
return $this->findAll()->where('url', $url)->fetch();
}
public function getProducts($id)
{
return $this->database->table('products')->where('category_id', $id);
}
- xand
- Člen | 15
tak uz sa mi to nejako podarilo rozchodit cez id.
zisla by sa este help s tym routrom: category/view?id=1 ⇒
kategoria/pekne-url
mam toto, ale nic to nerobi
$frontRouter[] = new Route('kategoria/<id>', array(
'presenter' => 'Category',
'action' => 'view',
'id' => array(
Route::VALUE => 0, // default value
Route::FILTER_OUT => callback('Category::getCategoryURLByID'),
),
));
public static function getCategoryURLByID($id)
{
$db = new Nette\Database\Connection('mysql:host=localhost;dbname=cd', 'root', 'heslo', NULL);
return $db->table('categories')->select('url')->where('id', $id)->fetch();
}