Re: More thoughts on Forge->Formo conversion
Bharat Mediratta <[email protected]> Wed, 24 Apr 2013 09:42:06 -0700
| Newsgroups | gmane.comp.web.gallery.devel |
|---|---|
| Message-ID | <CAESa+_mBjaohi3PTVvQD9ti2B+2BqBTK8+-mhrptcpVAiWxS+Q@mail.gmail.com> |
--===============3060568547519446421==
Content-Type: multipart/alternative; boundary=e89a8f6471cbd7c03d04db1dfdfe
--e89a8f6471cbd7c03d04db1dfdfe
Content-Type: text/plain; charset=ISO-8859-1
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.
I've also never been happy with our form/{add,edit}/ routing - that was a
framework 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 each controller do it in a more ad hoc approach. Take a look at that
while you're in there and let me know what you think.
-Bharat
On Wed, Apr 24, 2013 at 1:13 AM, Shad Laws <shad-xpYdmXCiSuZWk0Htik3J/[email protected]> wrote:
> Hey everyone,
>
> I'm working on getting acquainted with Formo a bit more, and it seems like
> the default, expected actions of Formo is a bit different than how we were
> using Forge in Gallery 3.0.x.
>
> Before, we usually (but not always) had a separate controller action for
> showing 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 we ended handling the form in three places.
>
> It seems that the default, expected behavior of Formo is to do this in one
> place with one action. It's smart enough to figure out if we have post
> data or not, and therefore if we are in "edit" or "save" mode (following
> the example). An example:
>
> public function action_edit() {
> $form = Formo::form(...)
> ->....; // build form, load with default values.
>
> 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.
>
> // Do some more stuff... then:
> Message::success(t("Done!"));
> // And/or:
> $this->redirect("somewhere/else");
> }
>
> $view = .....;
> $view->form = $form;
>
> $this->response->body($view);
> }
>
> I can overload a couple Formo classes to ensure that each form contains
> and validates our csrf, similar to what we did with Forge.
>
> Does this seem like a reasonable approach? Is there some other reason why
> we intentionally divided these up into multiple actions before?
>
> Take care,
> Shad
>
>
> ------------------------------------------------------------------------------
> 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
> __[ 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 ]
>
--e89a8f6471cbd7c03d04db1dfdfe
Content-Type: text/html; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr"><br><div style>Fantastic. =A0I never liked the way we had =
this split up before so it's nice to see that Formo can streamline it f=
or us.</div><div style><br></div><div style>I've also never been happy =
with our form/{add,edit}/ routing - that was a framework put in place befor=
e it was clear what the true need would be and it's only used in 9 plac=
es. =A0I'd be happy to see that routing go away and let each controller=
do it in a more ad hoc approach. =A0Take a look at that while you're i=
n there and let me know what you think.</div>
<div style><br></div><div style>-Bharat</div></div><div class=3D"gmail_extr=
a"><br><br><div class=3D"gmail_quote">On Wed, Apr 24, 2013 at 1:13 AM, Shad=
Laws <span dir=3D"ltr"><<a href=3D"mailto:shad-xpYdmXCiSuZWk0Htik3J/[email protected]" target=3D"=
_blank">shad-xpYdmXCiSuZWk0Htik3J/[email protected]</a>></span> wrote:<br>
<blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1p=
x #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 s=
eems like the default, expected actions of Formo is a bit different than ho=
w we were using Forge in Gallery 3.0.x.</div>
<div><br></div><div>Before, we usually (but not always) had a separate cont=
roller action for showing a form vs. validating a form (e.g. action_edit() =
and action_save()). =A0Also, 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 i=
s to do this in one place with one action. =A0It's smart enough to figu=
re out if we have post data or not, and therefore if we are in "edit&q=
uot; or "save" mode (following the example). =A0An example:</div>
<div><br></div><div><font face=3D"courier new, monospace">public function a=
ction_edit() {</font></div><div><font face=3D"courier new, monospace">=A0 $=
form =3D Formo::form(...)</font></div><div><font face=3D"courier new, monos=
pace">=A0 =A0 =A0 =A0 =A0 ->....; // build form, load with default value=
s.</font></div>
<div><font face=3D"courier new, monospace"><br></font></div><div><font face=
=3D"courier new, monospace">=A0 if ($form->load()->validate()) {</fon=
t></div><div><font face=3D"courier new, monospace">=A0 =A0 // load() gets t=
he values from post/files and fills the values,</font></div>
<div><font face=3D"courier new, monospace">=A0 =A0 // then validate() check=
s stuff and does nothing if the form isn't</font></div><div><font face=
=3D"courier new, monospace">=A0 =A0 // yet sent (nothing loaded) or adds er=
rors if it was.</font></div>
<div><font face=3D"courier new, monospace"><br></font></div><div><font face=
=3D"courier new, monospace">=A0 =A0 // Do some more stuff... then:</font></=
div><div><font face=3D"courier new, monospace">=A0 =A0=A0Message::success(t=
("Done!"));</font></div>
<div><font face=3D"courier new, monospace">=A0 =A0 // And/or:</font></div><=
div><font face=3D"courier new, monospace">=A0 =A0 $this->redirect("=
somewhere/else");</font></div><div><font face=3D"courier new, monospac=
e">=A0 }</font></div>
<div><font face=3D"courier new, monospace">=A0=A0</font></div><div><font fa=
ce=3D"courier new, monospace">=A0 $view =3D .....;</font></div><div><font f=
ace=3D"courier new, monospace">=A0 $view->form =3D $form;</font></div>
<div><font face=3D"courier new, monospace"><br></font></div><div><font face=
=3D"courier new, monospace">=A0 $this->response->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 ea=
ch form contains and validates our csrf, similar to what we did with Forge.=
<br></div><div><br></div><div>Does this seem like a reasonable approach? =
=A0Is there some other reason why we intentionally divided these up into mu=
ltiple actions before?</div>
<div><br></div><div>Take care,</div><div>Shad</div></div>
<br>-----------------------------------------------------------------------=
-------<br>
Try New Relic Now & 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, & 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/newrel=
ic_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 --> <a href=3D"http://gallery.sf.net/lists.php" targ=
et=3D"_blank">http://gallery.sf.net/lists.php</a> ]<br>
[ gallery info/FAQ/download --> <a href=3D"http://gallery.sf.net" target=
=3D"_blank">http://gallery.sf.net</a> ]<br></blockquote></div><br></div>
--e89a8f6471cbd7c03d04db1dfdfe--
--===============3060568547519446421==
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
--===============3060568547519446421==
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 ]
--===============3060568547519446421==--