Plugin Controller actions for entering data and redisplaying form or redirecting
I have something working, although I'm not sure it's the "correct" way of doing this.

I've got rid of the actionSaveName() method and my actionName() method in the Controller is now like this:

public function actionName()
{   
    $templateVars = array();

    if (craft()-&gt;request-&gt;isPostRequest())
    {
        // The form was submitted.
        $post = craft()-&gt;request-&gt;getPost();
        $nameModel = MyForm_NameModel::populateModel($post);

        if ($nameModel-&gt;validate()) {
            // Successfully posted the name.
            // TODO: Store in session.
            $this-&gt;redirectToPostedUrl();
        }
        else
        {
            // Something was wrong with the submitted names.
            $templateVars['errors'] = $nameModel-&gt;getErrors();
            $templateVars['nameModel'] = $nameModel;
        }
    }

    // Either the first time viewing the form, or there were errors.
    $this-&gt;renderTemplate('myForm/forms/dob', $templateVars);
}


And then plugins/myform/templates/forms/name.html is like this:

&lt;form method="post" action="" accept-charset="UTF-8"&gt;
    {{ getCsrfInput() }}
    &lt;input type="hidden" name="action" value="myForm/form/name"&gt;
    &lt;input type="hidden" name="redirect" value="{{ actionUrl('myForm/form/dob') }}"&gt;

    &lt;!-- Just a quick example of error output. ---&gt;
    {% if errors is defined %}
        {% if errors.firstname is defined %}
            {{ errors.firstname[0] }}
        {% endif %}
        {% if errors.surname is defined %}
            {{ errors.surname[0] }}
        {% endif %}
    {% endif %}

    &lt;p&gt;First name: &lt;input type="text" name="firstname" value="{% if nameModel is defined %}{{ nameModel.firstname }}{% endif %}"&gt;&lt;/p&gt;
    &lt;p&gt;Surname: &lt;input type="text" name="surname" value="{% if nameModel is defined %}{{ nameModel.surname }}{% endif %}"&gt;&lt;/p&gt;

    &lt;input type="submit" value="Submit"&gt;
&lt;/form&gt;


This seems to work fine but feels wrong in a few little ways:


The hidden action input is ignored; I can put anything in that and nothing changes; I really don't understand how that is supposed to be used.
If the submission is successful the URL redirected to is like /index.php?p=actions/myForm/form/dob rather than /actions/myForm/dob.
Mainly, that it feels quite different from the description in http://buildwithcraft.com/docs/plugins/controllers .