marklj/funnel

A catch-all controller (for Laravel).
25 1
Install
composer require marklj/funnel
Latest Version:v1.0
Last Updated:Sep 28, 2016
Links: GitHub  ·  Packagist
Maintainer: marklj

Funnel

A catch-all controller (for Laravel)

Installation

  1. Install from Composer:
composer require marklj/funnel
  1. Add Marklj\Funnel\FunnelServiceProvider to your app.php service provider configuration values.
  2. Publish the packages configuration:
php artisan vendor:publish

Quick Start

1. Send a request

Send a POST request to /mailbox. You can do this with AJAX from your front-end library of choice (Angular / Vue / etc), but for simplicity, we'll use a simple HTML form example.

The default Funnel endpoint is /mailbox, but this can be configured in the funnel.php configuration file that was published in the installation section.

The command request parameter is required and is automatically converted to StudlyCase when processed by Funnel.

<form action="/mailbox" method="POST">
    <input type="hidden" name="command" value="post_blog" />
    <input type="text" name="payload[blog_title]" />
    <button>Submit</button>
</form> 

Note that data does not need to be contained in a payload[] array unless you want to filter exactly what perameters are passed to your action. If you do not namespace your inputs, like name="blog_title", all of your input data will be passed to your action.

2. Map to an Action

Funnel will try to associate the StudlyCase command, in this case PostBlog, to an action. This association is made in the funnel.php configuration file.

// config/funnel.php
[
    // ...
    
    'action_mappings' => [
        'PostBlog' => \App\Blog\Actions\PostAction::class,

        // other mappings here
    ]
]

3. Create Action

The action class must implement the Marklj\Funnel\Actionalble interface. You are free to place whatever code you need here.

All of your payload data data will be available in the ActionPayload object.

<?php namespace App\Blog\Actions;

use Marklj\Funnel\Actionable;
use Marklj\Funnel\ActionPayload;

class PostAction implements Actionable 
{
    public function __invoke(ActionPayload $payload) {
        print 'Hello Funnel!';
        print 'Blog Post Title: ' . $payload->get('blog_title');
    }
}

Since the action is instantiated using Laravel's IoC container, you are free to inject any dependancies into your action via the constructor.

Related Packages

doctrine/dbal

Powerful PHP database abstraction layer (DBAL) with many features for database s...

644,549,754 9,698
laravel/framework

The Laravel Framework.

598,760,099 34,966
laravel/tinker

Powerful REPL for the Laravel framework.

507,193,856 7,441
laravel/serializable-closure

Laravel Serializable Closure provides an easy and secure way to serialize closur...

423,477,751 607
nunomaduro/collision

Cli error handling for console/command-line PHP applications.

399,241,428 4,660

Version History

Version Released License
v1.0