Zaseknutí při první aplikaci
- Edudant
- Člen | 18
Dobrý den,
tvořím v nette svou první apliakci. Přes mraky chyb které vznikli
nepozorností sem se již prokousal ale nemůžu přejít přes chybu
následující
v defaultpresenteru mám toto
<?php
class DefaultPresenter extends BasePresenter
{
Protected function createComponentMyform()
{
$items= array('Jihočeský','Jihomoravský','Karlovarský','Královehradecký');
$myform = new AppForm();
$myform->addText('nazev', 'Přesný název zařízení');
$myform->addSelect('Kraj','Kraj',$items);
$myform->addSubmit('ok', 'Send')
->onClick[] = array($this, 'okClicked');
$myform->addSubmit('cancel', 'Cancel')
->setValidationScope(FALSE) // prvek se nebude validovat
->onClick[] = array($this, 'cancelClicked');
// alternativa:
// $myform->onSubmit[] = array($this, 'formSubmitted');
return $myform;
}
public function cancelClicked()
{
redirect ('default');
}
public function okClicked()
{
$a=$myform->getvalues();
Debug::dump($button->getForm()->getValues());
$myzaznam = new Zaznam;
$zaznam->find($a);
return $zaznam;
redirect ('table');
}
public function formSubmitted(AppForm $myform)
{
// manual processing
if (!$myform['cancel']->isSubmittedBy()) ;
}
public function RenderDefault()
{
}
}
v šabloně default toto:
{block #content}
{control Myform}
při spuštění aplikace mi laděnka hází Component with name ‚Myform‘ does not exist.
Nevíte čím to?
Editoval Jan Tvrdík (9. 2. 2010 14:55)
- Ondřej Mirtes
- Člen | 1536
Vítej na fóru!
Mám pro tebe pár poznámek – formátuj zdrojový kód podle návodu. Nauč se používat tabulátory a správně formátuj svůj kód – coding standards :)
Tvůj zdroják bych upravil takto:
protected function createComponentMyForm()
{
$items = array('Jihočeský', 'Jihomoravský', 'Karlovarský', 'Královehradecký');
$myform = new AppForm();
$myform->addText('nazev', 'Přesný název zařízení');
$myform->addSelect('Kraj', 'Kraj', $items);
$myform->addSubmit('ok', 'Send');
$myform->addSubmit('cancel', 'Cancel')
->setValidationScope(FALSE) // prvek se nebude validovat
->onClick[] = array($this, 'cancelClicked');
// alternativa:
// $myform->onSubmit[] = array($this, 'formSubmitted');
return $myform;
}
public function cancelClicked(SubmitButton $button)
{
$this->redirect('default');
}
public function formSubmitted(AppForm $myform)
{
//zpracování formuláře
}
public function renderDefault()
{
}
V šabloně pak formulář vykreslíš pomocí {widget myForm} nebo {control myForm} (měls špatně velikost písmen, jak v metodě, tak v šabloně).
- Jakub Lédl
- Člen | 55
Mám takové mlhavé tušení, že ten problém s neexistující komponentou může vzniknout, pokud je oldLayoutMode nastaven na TRUE, ale používám nové šablony.
Zkus přidat do BasePresenteru:
<?php
public $oldLayoutMode = FALSE;
?>
Ad velikost písmen – myslím, že ta byla v orig. zdrojáku správně, ne? createComponentMyform i {widget|control myform} – malé f.
- Ondřej Mirtes
- Člen | 1536
Vždy ukaž kód, který ti nefunguje. Musel ses překlepnout, anebo se na komponentu odkazuješ v šabloně jiného presenteru, než kde máš tu továrničku :)
- Edudant
- Člen | 18
Chyba byla v tom, že jsem po upravení chybného kódu nesmazal temp.
Ještě něco, dá se použít tahle funkce v modelu? Háže mi to chybu spíš mi jde o to jestli můžu předat jako parametr pole a pak ho v tom dotazu takhle vložit.
<?php
public function find($podminka)
{
return $this->connection->select('* from zaznam where 'nazev'='%$podminka[nazev]%' and 'kraj'='%$podminka[kraj]%'' )->execute(dibi::IDENTIFIER);
}
?>
Editoval Edudant (9. 2. 2010 14:18)
- sodae
- Nette Evangelist | 250
Využívám možnosti dibi fluent , toto je uplně primitivné sql dotaz
public function find($podminka)
{
return $this->connection->select('*')
->from('zaznam')
->where("nazev = %s", $podminka['nazev'])
->where("kraj = %s", $podminka['kraj'])
->execute(dibi::IDENTIFIER);
}
- Edudant
- Člen | 18
a ,ůžu tímto způsobem přidávat k proměné zástupné znaky % ? jkde
mi to to že tvoříém vyhledávání v tabulce kdem á uživatel možnost
zadat nebo nezadat všechyn prvky formuláře tudíž kdyř ho nezadá bude
v podmínce vlastně jen neco = %% což by nemělo dělat neplechu..
resp když tam dám např LIKE
Editoval Edudant (10. 2. 2010 8:29)
- Edudant
- Člen | 18
mám ještě další problém.
Mám tuto funkci ve svém modelu. „céčka“ jsou převzaty
z formulářových checkboxů- nevíím jeslti mám dobře nastaven jejich typ
a jecjich porovnávání. kažodopádně takhle mi to vrací všechny záznamy.
Filtrují se pouze proměné $a a $b tz céčka už ne :-/
Nevíte v čem je chyba? Dík
<?php
public function findrett($a,$b,$c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8,$c9,$c10,$c11,$c12,$c13,$c14,$c15,$c16,$c17)
{
$dato = dibi::select('*') ->from($this->table);
if (isset($a)) {
$dato->where('Zarizeni')->like('%s','%' . $a . '%' ) ;
}
if ($b!='Vse') {
$dato->where('Code_Kraj=%s',$b);
}
if ($c1=='1') {
$dato->where('S1=%s','ano');
}
if ($c2=='1') {
$dato->where('S2=%s','ano');
}
if ($c3=='1') {
$dato->where('S3=%s','ano');
}
if ($c4=='1') {
$dato->where('S4=%s','ano');
}
if ($c5=='1') {
$dato->where('S5=%s','ano');
}
if ($c6=='1') {
$dato->where('S6=%s','ano');
}
if ($c7=='1') {
$dato->where('S7=%s','ano');
}
if ($c8=='1') {
$dato->where('S8=%s','ano');
}
if ($c9=='1') {
$dato->where('S9=%s','ano');
}
if ($c10=='1') {
$dato->where('S10=%s','ano');
}
if ($c11=='1') {
$dato->where('S11=%s','ano');
}
if ($c12=='1') {
$dato->where('S12=%s','ano');
}
if ($c13=='1') {
$dato->where('S13=%s','ano');
}
if ($c14=='1') {
$dato->where('S14=%s','ano');
}
if ($c15=='1') {
$dato->where('S15=%s','ano');
}
if ($c16=='1') {
$dato->where('S16=%s','ano');
}
if ($c17=='1') {
$dato->where('S17=%s','ano');
}
return $dato;}
?>
Editoval Edudant (11. 2. 2010 11:07)
- Vyki
- Člen | 388
To je docela divočina ten počet argumentů. Možná by bylo lepší
přenášet to v nějakém poli nebo alespoň použít funci func_get_args(), která umí s proměnným počtem
parametrů lépe pracovat. Při hledání chyby postupuj systematicky. Pomocí
Debug::consoleDump($)
zjisti, které parametry se předají.
<?php
public function findrett($a,$b,$c1,$c2,$c3,$c4,$c5,$c6,$c7,$c8,$c9,$c10,$c11,$c12,$c13,$c14,$c15,$c16,$c17)
{
$args = func_get_args();
Debug::consoleDump($args);
[...]
}
?>
- Patrik Votoček
- Člen | 2221
Ty krávo to je haluz!!! OMFG!!!
Nejdříve si to zjednoduš … Asi něják takto:
<?php
public function findrett($a,$b,$other = array())
{
$dato = dibi::select('*') ->from($this->table);
if (isset($a)) //tohle me pripada divne... spis bych psal if ($a != NULL)
$dato->where('Zarizeni')->like('%s','%' . $a . '%' ); //nejak nevidim/nechapu co se 'lajkuje'
if ($b != 'Vse') //nevim co tohle je ale budiz
$dato->where("[Code_Kraj] = %s",$b);
foreach ($other as $key => $value)
{
if ($value == TRUE)
$dato->where("[".$key."] = 'ano'");
}
return $dato;
}
?>
A pak řeš chybu
Editoval vrtak-cz (11. 2. 2010 16:16)