Search code examples
slimphp-5.6slim-3psr-7

Slim 3 - replacement for isPost()?


In Slim 2, I would do this,

$app->map('/login', function () use ($app) {

    // Test for Post & make a cheap security check, to get avoid from bots
    if ($app->request()->isPost() && sizeof($app->request()->post()) >= 2) {

        //
    }

    // render login
    $app->render('login.twig');

})->via('GET','POST')->setName('login');

But in Slim 3,

// Post the login form.
$app->post('/login', function (Request $request, Response $response, array $args) {

    // Get all post parameters:
    $allPostPutVars = $request->getParsedBody();

    // Test for Post & make a cheap security check, to get avoid from bots
    if ($request()->isPost() && sizeof($allPostPutVars) >= 2) {

        ///
    }

});

I get this error,

Fatal error: Function name must be a string in C:...

Obviously that isPost() is deprecated, so what should I use instead in Slim 3 for isPost's replacement?


Solution

  • According to documentation and comments, Slim supports these proprietary methods:

    • $request->isGet()
    • $request->isPost()
    • $request->isPut()
    • $request->isDelete()
    • $request->isHead()
    • $request->isPatch()
    • $request->isOptions()

    Here it is an example of usage:

    <?php
    require 'vendor/autoload.php';
    
    use Psr\Http\Message\ServerRequestInterface;
    use Psr\Http\Message\ResponseInterface;
    
    $app = new \Slim\App;
    $app->map(['GET', 'POST', 'PUT', 'DELETE', 'HEAD', 'PATCH', 'OPTIONS'], '/', function (ServerRequestInterface $request, ResponseInterface $response) {
        echo "isGet():" . $request->isGet() . "<br/>";
        echo "isPost():" . $request->isPost() . "<br/>";
        echo "isPut():" . $request->isPut() . "<br/>";
        echo "isDelete():" . $request->isDelete() . "<br/>";
        echo "isHead():" . $request->isHead() . "<br/>";
        echo "isPatch():" . $request->isPatch() . "<br/>";
        echo "isOptions():" . $request->isOptions() . "<br/>";
    
        return $response;
    });
    
    $app->run();