<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Code42 &#187; sfvalidator</title>
	<atom:link href="http://code42.pl/tag/sfvalidator/feed/" rel="self" type="application/rss+xml" />
	<link>http://code42.pl</link>
	<description>Wielkie Pytanie o Życie, Kod i całą resztę</description>
	<lastBuildDate>Wed, 25 Jan 2012 14:16:01 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Walidacja jednego pola formularza w symfony</title>
		<link>http://code42.pl/2009/03/31/walidacja-jednego-pola-formularza-w-symfony/</link>
		<comments>http://code42.pl/2009/03/31/walidacja-jednego-pola-formularza-w-symfony/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 13:31:23 +0000</pubDate>
		<dc:creator>Piotrek Reinmar Koszuliński</dc:creator>
				<category><![CDATA[Symfony]]></category>
		<category><![CDATA[baseformpropel]]></category>
		<category><![CDATA[sfvalidator]]></category>
		<category><![CDATA[walidacja]]></category>

		<guid isPermaLink="false">http://code42.pl/?p=315</guid>
		<description><![CDATA[Natknąłem się ostatnio na problem. Otóż wszystkie formularze walidujemy przy wykorzystaniu symfoniowych Formsów. Standardowe użycie podczas aktualizacji obiektu Place wygląda następująco: $this->form = new PlaceForm ($place); $this->form->bind ($request->getParameter ('place')); if ($this->form->isValid()) { $place = $this->form->updateObject(); $place->save(); } Co jednak kiedy nie chcemy walidować całego formularza? Np. w przypadku kiedy używając InPlaceEditora zmieniamy jedno pole. Podpowiem, [...]


Podobne wpisy:<ol><li><a href='http://code42.pl/2010/05/12/formularze-symfony-select-ograniczony-przez-wartosc-innego-pola/' rel='bookmark' title='Formularze Symfony: select ograniczony przez wartość innego pola'>Formularze Symfony: select ograniczony przez wartość innego pola</a></li>
<li><a href='http://code42.pl/2010/07/09/symfonypropel-domyslne-sortowanie/' rel='bookmark' title='Symfony+Propel: domyślne sortowanie'>Symfony+Propel: domyślne sortowanie</a></li>
<li><a href='http://code42.pl/2011/03/28/symfony-domyslny-wyglad-modulu/' rel='bookmark' title='Symfony: domyślny wygląd modułu'>Symfony: domyślny wygląd modułu</a></li>
</ol>]]></description>
			<content:encoded><![CDATA[<p>Natknąłem się ostatnio na problem. Otóż wszystkie formularze walidujemy przy wykorzystaniu <a href="http://www.symfony-project.org/book/forms/1_2/en/">symfoniowych Formsów</a>. Standardowe użycie podczas aktualizacji obiektu <code>Place</code> wygląda następująco:</p>
<pre>$this->form = new PlaceForm ($place);
$this->form->bind ($request->getParameter ('place'));

if ($this->form->isValid())
{
	$place = $this->form->updateObject();
	$place->save();
}</pre>
<p>Co jednak kiedy nie chcemy walidować całego formularza? Np. w przypadku kiedy używając <a href="http://wiki.github.com/madrobby/scriptaculous/ajax-inplaceeditor">InPlaceEditora</a> zmieniamy jedno pole. Podpowiem, że próba wysłania tylko tego jednego pola i wykorzystaniu tej samej akcji skończy się wyzerowaniem pozostałych pól.</p>
<p>Dokumentacja symfony niestety milczy na ten temat (choć przyznam się, że nie szukałem jakoś strasznie dokładnie), a wiemy chyba wszyscy co jest jej największą bolączką &#8211; opisanie tylko kilku funkcjonalności poszczególnych modułów. Jak się chce czegoś więcej, to droga wolna &#8211; szukajcie sobie sami w kodzie.</p>
<p>Tak też postąpiłem. I po koszmarnie długim czasie odkryłem, że do walidowania każdego z pól służy metoda o intuicyjnej nazwie&#8230; <code>clean()</code>. Przykład walidacji jednego pola:</p>
<pre>$form = new PlaceForm($place);
try
{
	$cleaned = $form->getValidator($field_name)->clean($value); #1

	$place->setByName($field_name, $cleaned, BasePeer::TYPE_FIELDNAME); #2
	$place->save();
}
catch (sfValidatorError $e) #3
{
	#Obsługa błędu
}</pre>
<ol>
<li>Pobranie odpowiedniego walidatora oraz wywołanie na nim metody <code>clean()</code>, która w przypadku, gdy pole ma poprawną wartość zwraca je. A w przypadku błędu wyrzuca wyjątek <code>sfValidatorError</code>,</li>
<li>Zapisanie wyczyszczonej wartości tego pola do obiektu,</li>
<li>Kod obsługujący przypadek niewalidującego się pola.</li>
</ol>
<p>Mam nadzieję, że ten krótki artykuł pozwoli komuś zaoszczędzić trochę czasu.</p>
<p>Wpis opublikowałem także na prywatnym blogu <a href="http://reinmar.jogger.pl/2009/03/31/walidacja-jednego-pola-formularza-w-symfony/">reinmar.jogger.pl</a>.</p>


<p>Podobne wpisy:<ol><li><a href='http://code42.pl/2010/05/12/formularze-symfony-select-ograniczony-przez-wartosc-innego-pola/' rel='bookmark' title='Formularze Symfony: select ograniczony przez wartość innego pola'>Formularze Symfony: select ograniczony przez wartość innego pola</a></li>
<li><a href='http://code42.pl/2010/07/09/symfonypropel-domyslne-sortowanie/' rel='bookmark' title='Symfony+Propel: domyślne sortowanie'>Symfony+Propel: domyślne sortowanie</a></li>
<li><a href='http://code42.pl/2011/03/28/symfony-domyslny-wyglad-modulu/' rel='bookmark' title='Symfony: domyślny wygląd modułu'>Symfony: domyślny wygląd modułu</a></li>
</ol></p>]]></content:encoded>
			<wfw:commentRss>http://code42.pl/2009/03/31/walidacja-jednego-pola-formularza-w-symfony/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>

