Slim PHP Framework PhpStorm IDE autocompletion Solution

I am a big fan of PHP Slim Framework. But sometimes, I realized that when I work with large and complex libraries with Slim as dependency. It just kills my productivity, it kills my valuable time too. It’s all because of I can’t remember all the method names, properties of my dependent class or libraries. And with Pimple dependencies Slim Framework don’t have any way to bypass referencing of my third party libraries which I add through it’s container as dependency. So I decided to figure out a solution for me.

First, I just installed and configured slim framework and here is my scripts.

<?php
//index.php
require "../vendor/autoload.php";
$app = new \Slim\App();
$container = $app->getContainer();

/**
 * @return \ShahariaAzam\Classes\HintsClass
 */
$container['hints'] = function () {
 return new \ShahariaAzam\Classes\HintsClass();
};

$app->get('/foo', function (\Slim\Http\Request $request, \Slim\Http\Response $response) {
 /** @var Dummy $this */
 $this->hints->printHelloWorld();
 $response->write("Hello World");
});

$app->get('/another-foo', function (\Slim\Http\Request $request, \Slim\Http\Response $response) {
 /** @var Dummy $this */
 $this->hints->printHelloWorld();
});
$app->run();

 

And I created a class HintsClass. Now the main trick is, I created a dummy _ide_autocomplete.php file in the project root and defined all the containers key as public property. Like this.

<?php
//src/HintsClass
namespace ShahariaAzam\Classes;

/**
 * Class HintsClass
 * @package ShahariaAzam\Classes
 */
class HintsClass
{
    /**
     * @var int
     */
    public $test = 1;

    /**
     * @return bool
     */
    public function testMethod()
    {
        return true;
    }

    /**
     * @return string
     */
    public function printHelloWorld()
    {
        return "HelloWorld";
    }
}

 

Now our goal is from inside route, our PHPStorm IDE will show the autocomplete and hinting for code completion when we will access this class with $this->hints->[ctrl+space to see autocompletion]. And in our _ide_autocomplete.php file we wrote the following codes. FYI, this _ide_autocomplete.php will never execute. It just used for giving IDE as a referential hinting for all the properties .

<?php

//_ide_autocomplete.php
class Dummy
{
    /**
     * @var \ShahariaAzam\Classes\HintsClass
     */
    public $hints;
}

 

You will see in this Dummy class file according to our slim containers[‘hints’], I just mentioned the same return reference here. And see my main index.php, in every route I just gave IDE hints about the $this context with

/** @var Dummy $this */

And after that from route context IDE will show the autocompletion of our dependencies like $this->hints[ctrl+space to see suggestions].

You can see my whole scripts are in GitHub https://github.com/shahariaazam/slim-phpstorm-autocomplete. And see this work in YouTube, https://www.youtube.com/watch?v=jyEvApLRofw .Please let me know if any issue found, write me in comments. Thank you.

Shaharia is a professional software engineer with more than 10 years of experience in the relevant fields. Digital ad certified, cloud platform architect, Big data enthusiasts, tech early adopters.