Re: More thoughts on Forge->Formo conversion

Chad Kieffer <[email protected]> Fri, 26 Apr 2013 12:39:06 -0600
Newsgroups gmane.comp.web.gallery.devel
Message-ID <[email protected]>
--===============8569396820029793526==
Content-Type: multipart/alternative;
	boundary=Apple-Mail-A1CDA034-BDDF-4DD4-8D11-05E7B9CD7CC2
Content-Transfer-Encoding: 7bit


--Apple-Mail-A1CDA034-BDDF-4DD4-8D11-05E7B9CD7CC2
Content-Type: text/plain;
	charset=us-ascii
Content-Transfer-Encoding: quoted-printable

+1 from me, too. For clarity, will separate action routes be kept or will ad=
d/edit be replaced with something like save?

On Apr 24, 2013, at 10:42 AM, Bharat Mediratta <[email protected]> wrote:

>=20
> Fantastic.  I never liked the way we had this split up before so it's nice=
 to see that Formo can streamline it for us.
>=20
> I've also never been happy with our form/{add,edit}/ routing - that was a f=
ramework put in place before it was clear what the true need would be and it=
's only used in 9 places.  I'd be happy to see that routing go away and let e=
ach controller do it in a more ad hoc approach.  Take a look at that while y=
ou're in there and let me know what you think.
>=20
> -Bharat
>=20
>=20
> On Wed, Apr 24, 2013 at 1:13 AM, Shad Laws <shad-xpYdmXCiSuZWk0Htik3J/[email protected]> wrote:
>> Hey everyone,
>>=20
>> I'm working on getting acquainted with Formo a bit more, and it seems lik=
e the default, expected actions of Formo is a bit different than how we were=
 using Forge in Gallery 3.0.x.
>>=20
>> Before, we usually (but not always) had a separate controller action for s=
howing a form vs. validating a form (e.g. action_edit() and action_save()). =
 Also, it was common to have a third function generate the form for us, so w=
e ended handling the form in three places.
>>=20
>> It seems that the default, expected behavior of Formo is to do this in on=
e place with one action.  It's smart enough to figure out if we have post da=
ta or not, and therefore if we are in "edit" or "save" mode (following the e=
xample).  An example:
>>=20
>> public function action_edit() {
>>   $form =3D Formo::form(...)
>>           ->....; // build form, load with default values.
>>=20
>>   if ($form->load()->validate()) {
>>     // load() gets the values from post/files and fills the values,
>>     // then validate() checks stuff and does nothing if the form isn't
>>     // yet sent (nothing loaded) or adds errors if it was.
>>=20
>>     // Do some more stuff... then:
>>     Message::success(t("Done!"));
>>     // And/or:
>>     $this->redirect("somewhere/else");
>>   }
>>  =20
>>   $view =3D .....;
>>   $view->form =3D $form;
>>=20
>>   $this->response->body($view);
>> }
>>=20
>> I can overload a couple Formo classes to ensure that each form contains a=
nd validates our csrf, similar to what we did with Forge.
>>=20
>> Does this seem like a reasonable approach?  Is there some other reason wh=
y we intentionally divided these up into multiple actions before?
>>=20
>> Take care,
>> Shad
>>=20
>> -------------------------------------------------------------------------=
-----
>> Try New Relic Now & We'll Send You this Cool Shirt
>> New Relic is the only SaaS-based application performance monitoring servi=
ce
>> that delivers powerful full stack analytics. Optimize and monitor your
>> browser, app, & servers with just a few lines of code. Try New Relic
>> and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_ap=
r
>> __[ g a l l e r y - d e v e l ]_________________________
>>=20
>> [ list info/archive --> http://gallery.sf.net/lists.php ]
>> [ gallery info/FAQ/download --> http://gallery.sf.net ]
>=20
> --------------------------------------------------------------------------=
----
> Try New Relic Now & We'll Send You this Cool Shirt
> New Relic is the only SaaS-based application performance monitoring servic=
e=20
> that delivers powerful full stack analytics. Optimize and monitor your
> browser, app, & servers with just a few lines of code. Try New Relic
> and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_apr=

> __[ g a l l e r y - d e v e l ]_________________________
>=20
> [ list info/archive --> http://gallery.sf.net/lists.php ]
> [ gallery info/FAQ/download --> http://gallery.sf.net ]

--Apple-Mail-A1CDA034-BDDF-4DD4-8D11-05E7B9CD7CC2
Content-Type: text/html;
	charset=utf-8
Content-Transfer-Encoding: quoted-printable

<html><head><meta http-equiv=3D"content-type" content=3D"text/html; charset=3D=
utf-8"></head><body dir=3D"auto"><div>+1 from me, too. For clarity, will sep=
arate action routes be kept or will add/edit be replaced with something like=
 save?</div><div><br>On Apr 24, 2013, at 10:42 AM, Bharat Mediratta &lt;<a h=
ref=3D"mailto:[email protected]">[email protected]</a>&gt; wrote:<br><br><=
/div><div><span></span></div><blockquote type=3D"cite"><div><div dir=3D"ltr"=
><br><div style=3D"">Fantastic. &nbsp;I never liked the way we had this spli=
t up before so it's nice to see that Formo can streamline it for us.</div><d=
iv style=3D""><br></div><div style=3D"">I've also never been happy with our f=
orm/{add,edit}/ routing - that was a framework put in place before it was cl=
ear what the true need would be and it's only used in 9 places. &nbsp;I'd be=
 happy to see that routing go away and let each controller do it in a more a=
d hoc approach. &nbsp;Take a look at that while you're in there and let me k=
now what you think.</div>

<div style=3D""><br></div><div style=3D"">-Bharat</div></div><div class=3D"g=
mail_extra"><br><br><div class=3D"gmail_quote">On Wed, Apr 24, 2013 at 1:13 A=
M, Shad Laws <span dir=3D"ltr">&lt;<a href=3D"mailto:shad-xpYdmXCiSuZWk0Htik3J/[email protected]" targ=
et=3D"_blank">shad-xpYdmXCiSuZWk0Htik3J/[email protected]</a>&gt;</span> wrote:<br>

<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px=
 #ccc solid;padding-left:1ex"><div dir=3D"ltr">Hey everyone,<div><br></div><=
div>I'm working on getting acquainted with Formo a bit more, and it seems li=
ke the default, expected actions of Formo is a bit different than how we wer=
e using Forge in Gallery 3.0.x.</div>



<div><br></div><div>Before, we usually (but not always) had a separate contr=
oller action for showing a form vs. validating a form (e.g. action_edit() an=
d action_save()). &nbsp;Also, it was common to have a third function generat=
e the form for us, so we ended handling the form in three places.</div>



<div><br></div><div>It seems that the default, expected behavior of Formo is=
 to do this in one place with one action. &nbsp;It's smart enough to figure o=
ut if we have post data or not, and therefore if we are in "edit" or "save" m=
ode (following the example). &nbsp;An example:</div>



<div><br></div><div><font face=3D"courier new, monospace">public function ac=
tion_edit() {</font></div><div><font face=3D"courier new, monospace">&nbsp; $=
form =3D Formo::form(...)</font></div><div><font face=3D"courier new, monosp=
ace">&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; -&gt;....; // build form, load with d=
efault values.</font></div>



<div><font face=3D"courier new, monospace"><br></font></div><div><font face=3D=
"courier new, monospace">&nbsp; if ($form-&gt;load()-&gt;validate()) {</font=
></div><div><font face=3D"courier new, monospace">&nbsp; &nbsp; // load() ge=
ts the values from post/files and fills the values,</font></div>



<div><font face=3D"courier new, monospace">&nbsp; &nbsp; // then validate() c=
hecks stuff and does nothing if the form isn't</font></div><div><font face=3D=
"courier new, monospace">&nbsp; &nbsp; // yet sent (nothing loaded) or adds e=
rrors if it was.</font></div>



<div><font face=3D"courier new, monospace"><br></font></div><div><font face=3D=
"courier new, monospace">&nbsp; &nbsp; // Do some more stuff... then:</font>=
</div><div><font face=3D"courier new, monospace">&nbsp; &nbsp;&nbsp;Message:=
:success(t("Done!"));</font></div>



<div><font face=3D"courier new, monospace">&nbsp; &nbsp; // And/or:</font></=
div><div><font face=3D"courier new, monospace">&nbsp; &nbsp; $this-&gt;redir=
ect("somewhere/else");</font></div><div><font face=3D"courier new, monospace=
">&nbsp; }</font></div>



<div><font face=3D"courier new, monospace">&nbsp;&nbsp;</font></div><div><fo=
nt face=3D"courier new, monospace">&nbsp; $view =3D .....;</font></div><div>=
<font face=3D"courier new, monospace">&nbsp; $view-&gt;form =3D $form;</font=
></div>

<div><font face=3D"courier new, monospace"><br></font></div><div><font face=3D=
"courier new, monospace">&nbsp; $this-&gt;response-&gt;body($view);</font></=
div><div><font face=3D"courier new, monospace">}</font></div>

<div><br></div><div>I can overload a couple Formo classes to ensure that eac=
h form contains and validates our csrf, similar to what we did with Forge.<b=
r></div><div><br></div><div>Does this seem like a reasonable approach? &nbsp=
;Is there some other reason why we intentionally divided these up into multi=
ple actions before?</div>



<div><br></div><div>Take care,</div><div>Shad</div></div>
<br>------------------------------------------------------------------------=
------<br>
Try New Relic Now &amp; We'll Send You this Cool Shirt<br>
New Relic is the only SaaS-based application performance monitoring service<=
br>
that delivers powerful full stack analytics. Optimize and monitor your<br>
browser, app, &amp; servers with just a few lines of code. Try New Relic<br>=

and get this awesome Nerd Life shirt! <a href=3D"http://p.sf.net/sfu/newreli=
c_d2d_apr" target=3D"_blank">http://p.sf.net/sfu/newrelic_d2d_apr</a><br>__[=
 g a l l e r y - d e v e l ]_________________________<br>
<br>
[ list info/archive --&gt; <a href=3D"http://gallery.sf.net/lists.php" targe=
t=3D"_blank">http://gallery.sf.net/lists.php</a> ]<br>
[ gallery info/FAQ/download --&gt; <a href=3D"http://gallery.sf.net" target=3D=
"_blank">http://gallery.sf.net</a> ]<br></blockquote></div><br></div>
</div></blockquote><blockquote type=3D"cite"><div><span>--------------------=
----------------------------------------------------------</span><br><span>T=
ry New Relic Now &amp; We'll Send You this Cool Shirt</span><br><span>New Re=
lic is the only SaaS-based application performance monitoring service </span=
><br><span>that delivers powerful full stack analytics. Optimize and monitor=
 your</span><br><span>browser, app, &amp; servers with just a few lines of c=
ode. Try New Relic</span><br><span>and get this awesome Nerd Life shirt! <a h=
ref=3D"http://p.sf.net/sfu/newrelic_d2d_apr">http://p.sf.net/sfu/newrelic_d2=
d_apr</a></span></div></blockquote><blockquote type=3D"cite"><div><span>__[ g=
 a l l e r y - d e v e l ]_________________________</span><br><span></span><=
br><span>[ list info/archive --&gt; <a href=3D"http://gallery.sf.net/lists.p=
hp">http://gallery.sf.net/lists.php</a> ]</span><br><span>[ gallery info/FAQ=
/download --&gt; <a href=3D"http://gallery.sf.net">http://gallery.sf.net</a>=
 ]</span></div></blockquote></body></html>=

--Apple-Mail-A1CDA034-BDDF-4DD4-8D11-05E7B9CD7CC2--


--===============8569396820029793526==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

------------------------------------------------------------------------------
Try New Relic Now & We'll Send You this Cool Shirt
New Relic is the only SaaS-based application performance monitoring service 
that delivers powerful full stack analytics. Optimize and monitor your
browser, app, & servers with just a few lines of code. Try New Relic
and get this awesome Nerd Life shirt! http://p.sf.net/sfu/newrelic_d2d_apr
--===============8569396820029793526==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline

__[ g a l l e r y - d e v e l ]_________________________

[ list info/archive --> http://gallery.sf.net/lists.php ]
[ gallery info/FAQ/download --> http://gallery.sf.net ]
--===============8569396820029793526==--