PHP code example of uniondrug / middleware

1. Go to this page and download the library: Download uniondrug/middleware library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

uniondrug / middleware example snippets



return [
    'default' => [
        ...
        'providers'           => [
            \Uniondrug\Middleware\MiddlewareServiceProvider::class,
        ],
        ...
    ],
];



/**
 * middleware.php
 *
 */
return [
    'default' => [
        // 应用定义的中间件
        'middlewares' => [
            'test1' => \App\Middlewares\Test1Middleware::class,
            'test2' => \App\Middlewares\Test2Middleware::class,
            'test3' => \App\Middlewares\Test3Middleware::class,
            'test4' => \App\Middlewares\Test4Middleware::class,
            'test5' => \App\Middlewares\Test5Middleware::class,
        ],

        // 全局中间件,会应用在全部路由,优先级在应用定义之前
        'global'      => [
            'cors', 'cache', 'favicon', 'trace',
        ],

        // 全局中间件,会应用在全部路由,优先级在应用定义之后
        'globalAfter' => [
            'powered',
        ],

        // 以下是中间件用到的配置参数
        'cache'       => [
            'lifetime' => 60,
        ],
        'powered_by'  => 'Un',
    ],
];


/**
 * Test1Middleware.php
 *
 */

namespace App\Middlewares;

use Phalcon\Http\RequestInterface;
use Uniondrug\Middleware\DelegateInterface;
use Uniondrug\Middleware\Middleware;

class Test1Middleware extends Middleware
{
    public function handle(RequestInterface $request, DelegateInterface $next)
    {
        echo "Test1.0\n";
        $response = $next($request);
        echo "Test1.1\n";
        return $response;
    }
}


/**
 * IndexController.php
 *
 */
namespace App\Controllers;

use Phalcon\Mvc\Controller;

/**
 * Class IndexController
 *
 * @package App\Controllers
 * @Middleware('test1')
 */
class IndexController extends Controller
{
    public function beforeExecuteRoute($dispatcher)
    {
        $this->middlewareManager->bind($this, ['test2']);
        $this->middlewareManager->bind($this, ['test3'], ['only' => ['indexAction']]);
    }

    /**
     * @Middleware('test4', 'test5')
     */
    public function indexAction()
    {
        //var_dump($this->middlewareManager);
        return $this->response->setJsonContent(['msg' => memory_get_usage()]);
    }

    public function showAction()
    {
        return $this->response->setJsonContent(['msg' => 'show']);
    }
}


class Test1Middleware extends Middleware
{
    public function handle(RequestInterface $request, DelegateInterface $next)
    {
        echo "Test1.0\n"; // 在 $next($request) 之前的代码,将在请求被最终Controller::Action处理之前调用
        $_POST['added_var'] = 'new value'; // 改写请求参数,往Request中添加一个新的POST参数。
                                           // 这样下一个Middleware乃至Controller::Action中使用 `$request` 对象的 `getPost()` 方法就能获取到新的参数值了。
        $response = $next($request);
        echo "Test1.1\n"; // 在 $next($request) 之后的代码,将在请求被最终Controller::Action处理之后调用
        return $response;
    }
}