Posting front-end form to plugin controller route results in 404 I'm working on a plugin and need a front-end (non CP) form that submits to one of the plugin controllers. Here's my setup:

- plugins
  - portal
    -- PortalPlugin.php
    - controller
      -- Portal_AccessController.php


Portal_AccessController.php

&lt;?php
namespace Craft;

class Portal_AccessController extends BaseController {

    protected $allowAnonymous = true;

    public function actionLogin() {

        echo 'Here';

    }

}


I then created a front-end form by adding a new template directory in /craft/templates:

- pro-portal
  -- index.html


With index.html containing:

&lt;form method="post" action="" accept-charset="UTF-8"&gt;
    &lt;input type="hidden" name="action" value="portal/access/login"&gt;

    &lt;div&gt;
        &lt;input type="text" maxlength="4"&gt;
        &lt;input type="text" maxlength="4"&gt;
        &lt;input type="text" maxlength="4"&gt;
        &lt;input type="text" maxlength="4"&gt;
    &lt;/div&gt;
    &lt;a href="{{ actionUrl('portal/access/login') }}"&gt;Test me&lt;/a&gt;
    &lt;input class="btn submit" type="submit" value="Submit"&gt;
&lt;/form&gt;


Hitting mydomain.com/pro-portal displays the form. On submit it returns to /pro-portal but with a 404 error. 

I also tried creating an action link but that also results in a 404 at /index.php/actions/portal/access/login.

I've looked through answers on similar questions and tried all the solutions but no luck. Am I overlooking something? Missing something?
You're getting a 404 because your action method isn't telling Craft what do to after it has echo'd 'Here', so routing continues.

See #3 is that link:

The request doesn’t necessarily end after a controller has been called. The controller may allow it to keep going.


You can redirect, end the request, load up a template to display, etc.

Update:

The controller folder needs to be renamed to controllers.