prázdný action u vygenerovaného formuláře
Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
- maChy
- Člen | 9
Mám problém, který se snažím vyřešit už tak dvě hodiny a pořád nic. Vyzkoušel jsem i vzorový příklad ze zdrojak.root.cz a tam se ta chyba taky vyskytuje. U vygenerovaného formuláře se zobrazuje prázdný action.
<script>
<?php
require 'Nette\loader.php';
// pokud používáte verzi pro PHP 5.3, odkomentujte následující řádek:
//use Nette\Forms\Form, Nette\Debug;
Debug::enable();
$countries = array(
'Zvolte zemi',
'Evropa' => array(
'CZ' => 'Česká republika',
'FR' => 'Francie',
'DE' => 'Německo',
'SK' => 'Slovensko',
'GB' => 'Velká Británie',
),
'AU' => 'Austrálie',
'CA' => 'Kanada',
'?' => 'jiná',
);
$sex = array(
'm' => 'muž',
'f' => 'žena',
);
$form = new Form;
$form->addText('name', 'Jméno:')
->addRule(Form::FILLED, 'Zadejte jméno');
$form->addText('age', 'Věk:')
->addRule(Form::FILLED, 'Zadejte věk')
->addRule(Form::INTEGER, 'Věk musí být číslo')
->addRule(Form::RANGE, 'Věk musí být v rozmezí od %d do %d', array(5, 120));
$form->addRadioList('gender', 'Pohlaví:', $sex);
$form->addText('email', 'E-mail:')
->setEmptyValue('@')
->addCondition(Form::FILLED) // podmínka: pokud je e-mail vyplněn
->addRule(Form::EMAIL, 'E-mailová adresa není platná'); // pak musí být platný
$form->addCheckbox('promo', 'zasílejte mi reklamu');
$form->addSelect('country', 'Země:', $countries)
->skipFirst()
->addRule(Form::FILLED, 'Vyberte zemi');
$form->addPassword('password', 'Heslo:')
->addRule(Form::FILLED, 'Zvolte si heslo')
->addRule(Form::MIN_LENGTH, 'Zadané heslo je příliš krátké, zvolte si heslo alespoň o %d znacích', 3);
$form->addPassword('password2', 'Heslo pro kontrolu:')
->addRule(Form::FILLED, 'Zadejte heslo ještě jednou pro kontrolu')
->addRule(Form::EQUAL, 'Zadané hesla se neshodují', $form['password']);
$form->addProtection('Vypršel ochranný časový limit, odešlete prosím formulář ještě jednou');
$form->addSubmit('register', 'Registrovat');
// jestliže byl formulář odeslán
if ($form->isSubmitted()) {
// a jestliže jsou všechny položky vyplněny správně
if ($form->isValid()) {
echo '<h1>Formulář byl odeslán</h1>';
$values = $form->getValues();
Debug::dump($values);
exit;
}
} else {
// a jestliže nebyl odeslán, nastavíme výchozí hodnoty
$form->setDefaults(array(
'promo' => TRUE,
));
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="cs" lang="cs">
<head>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta http-equiv="content-language" content="cs" />
<title>Registrační formulář</title>
<style type="text/css">
<!--
.required {
color: darkred
}
th {
width: 8em;
text-align: right;
}
-->
</style>
</head>
<body>
<h1>Registrační formulář</h1>
<?php echo $form ?>
</body>
</html>
</script>
verze nette:
Nette Framework 0.9.1 (revision dc607f0 released on 2009–09–18)
- Tomik
- Nette Evangelist | 485
Prázdný action není chyba. Pouze to znamená, že action vede na tu samo
stránku. Podívej se na https://doc.nette.org/cs/forms …
Pokud chceš změnit action použij $form->setAction($url);
, ale
bude-li to URL action změněno, a formulář se odešle jinam, než do toho
souboru, kde byl zobrazen, pak dojde k tomu, že se nevykoná obsah podmínky
if ($form->isSubmitted()) { ...
, tohle bude potřeba přesunout
do souboru, na který míří action…