Dědičnost a předávání neurčitého počtu parametru v metodě
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- Blizard
- Člen | 45
Zdravím,
chtěl jsem si v baseModel vytvořit metodu která se bude jmenovat třeba insertRow($table) která má takovouto podobu:
/**
* Obecná metoda pro vložení xx záznamů do tabulky
* @param string $table název tabulky
* @return integer Vrací ID posledního vloženého záznamu
*/
protected function insertRow($table)
{
$numargs = func_num_args();
$selector = ($numargs > 1 ? "%m" : "%v");
$value = array();
for ($i = 1; $i < $numargs; $i++)
$value[] = func_get_arg($i);
\Nette\Diagnostics\Debugger::dump($numargs);
\Nette\Diagnostics\Debugger::dump($selector);
\Nette\Diagnostics\Debugger::dump($value);
try
{
$this->db->begin();
$this->db->query("INSERT INTO [:prefix:$table] $selector", $value);
$this->db->commit();
} catch (Exception $ex) {
$this->db->rollback();
}
return $this->db->getInsertId();
}
dále mám klasicky další model ProducerModel který dědí od baseModel v kterém mám
public function insertRow($table)
{
return parent::insertRow($table);
}
a v presenteru
$this->producerModel->insertRow("producer", $values);
problém je jednoduchý, nevím přesně jak mám předat neurčitý počet
argumentů těm modelům ke zpracování.
Mohlo by tam být klidně
$this->producerModel->insertRow("producer", $values1, $values2);
kde $valueX jsou pole hodnot.
Lze to nějak rozumně vyřešit? Díky.
- factor
- Člen | 28
Ahoj
/**
* Obecná metoda pro vložení xx záznamů do tabulky
* @param string $table název tabulky
* @param array $data data určená pro vložení ($key = název sloupce, $val = data)
* @return NDB vložený řádek
*/
publicfunction insertRow($table, $data)
{
try
{
$query = $this->db->table($table)->insert($data);
}catch (Exception $e){
throw new $e;
}
return $query;
}
Pouze nástřel
Editoval factor (10. 12. 2013 10:08)
- llook
- Člen | 407
Tohle:
$value = array();
for ($i = 1; $i < $numargs; $i++)
$value[] = func_get_arg($i);
Se dá zkrátit takto:
$value = func_get_args();
array_shift($value);
K samotné otázce, mělo by fungovat tohle:
public function insertRow($table)
{
return call_user_func_array(['parent', __FUNCTION__], func_get_args());
}
- Blizard
- Člen | 45
Pomohlo, děkuji.
llook napsal(a):
Tohle:
$value = array(); for ($i = 1; $i < $numargs; $i++) $value[] = func_get_arg($i);
Se dá zkrátit takto:
$value = func_get_args(); array_shift($value);
K samotné otázce, mělo by fungovat tohle:
public function insertRow($table) { return call_user_func_array(['parent', __FUNCTION__], func_get_args()); }