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
+
0
-

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
+
0
-

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…