Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unable to get to work with simple service provider example #54

Open
codecrafting-io opened this issue Apr 20, 2018 · 0 comments
Open

Unable to get to work with simple service provider example #54

codecrafting-io opened this issue Apr 20, 2018 · 0 comments

Comments

@codecrafting-io
Copy link

codecrafting-io commented Apr 20, 2018

I can't get the bar to work with a simple service provider example. Actually it's not entirely based on simple service provider example, but its similar, just some folder structures changed. First I tried by creating a class called DebugBarServiceProvider like so:

<?php
namespace Bootstrap\Providers;
use Snowair\Debugbar\ServiceProvider as DebugBar;
use Snowair\Debugbar\Whoops\WhoopsServiceProvider as Whoops;
/**
 * \App\Providers\MvcDispatcherServiceProvider
 *
 * @package App\Providers
 */
class DebugBarServiceProvider extends AbstractServiceProvider
{
    /**
     * The Service name.
     * @var string
     */
    protected $serviceName = 'debugBar';

    /**
     * Register application service.
     *
     * @return void
     */
    public function register()
    {
        error_reporting(E_ALL);
        $this->di->setShared($this->serviceName, function () {
                $debugBar = new DebugBar();
                $debugBar->start();
                new Whoops($this->di);
                return $debugBar;
            }
        );
    }
}

I have a boostrap class like that and I make sure the DI and application is setted before the debug bar

<?php
namespace Bootstrap;
use Phalcon\Config;
use Phalcon\Di;
use Phalcon\Di\FactoryDefault;
use Phalcon\DiInterface;
use Phalcon\Mvc\Application;
use Bootstrap\Providers\ServiceProviderInterface;
use Bootstrap\Providers\EventManagerServiceProvider as EventManager;
use Bootstrap\Providers\DebugBarServiceProvider;
use Snowair\Debugbar\ServiceProvider as DebugBar;
use Snowair\Debugbar\Whoops\WhoopsServiceProvider as Whoops;

class BootstrapApplication
{
    /**
     * The Dependency Injector.
     * @var DiInterface
     */
    protected $di;

    /**
     * The Service Providers.
     * @var ServiceProviderInterface[]
     */
    protected $serviceProviders = [];
    
    /**
     * The Application.
     * @var Application
     */
    protected $app;
    /**
     * Bootstrap constructor.
     *
     * @param $appPath
     */
    public function __construct(Config $config=null)
    {
        $this->di = new FactoryDefault();
        Di::setDefault($this->di);
        $this->di->setShared('bootstrapApp', $this);
        if($config)  $this->di->setShared("config", $config);
        $providers = include APP_PATH . '/config/providers.php';
        $application = new Application($this->di);
        $this->di->setShared("app", $application);
        if($config->application->mode == "developtment") {
            $this->initializeService(new DebugBarServiceProvider($this->di));
        } elseif($config->application->mode == "maintenance") {
            header("location: assets/html/maintenance.html");
            exit;
        }
        if (is_array($providers)) {
            $this->initializeServices($providers);
        }
        if(!array_key_exists("eventsManager", $this->di)) {
            $this->initializeService(new EventManager($this->di));
            $application->setEventsManager($this->di->getShared("eventsManager"));
        }
        $this->app = $application;
    }

    /**
     * Gets the Dependency Injector.
     *
     * @return Di
     */
    public function getDi()
    {
        return $this->di;
    }


    public function getContent($pathInfo=null)
    {
        return $this->handle($pathInfo)->getContent();
    }

     /**
     * Runs the Application
     *
     * @return string
     */
    public function run($pathInfo=null)
    {
        echo $this->handle($pathInfo)->getContent();
    }

    public function runAndSend($pathInfo=null)
    {
        $this->handle($pathInfo)->send();
    }

    public function handle($pathInfo=null)
    {
        return $this->app->handle($pathInfo);
    }

    /**
     * Initialize Services in the Dependency Injector Container.
     *
     * @param string[] $providers
     */
    protected function initializeServices(array $providers)
    {
        foreach ($providers as $name => $class) {
            if(!$class instanceof DebugBarServiceProvider) {
                $this->initializeService(new $class($this->di));
            }
        }
    }

    /**
     * Initialize the Service in the Dependency Injector Container.
     *
     * @param ServiceProviderInterface $serviceProvider
     *
     * @return $this
     */
    protected function initializeService(ServiceProviderInterface $serviceProvider)
    {
        $serviceProvider->register();
        $this->serviceProviders[$serviceProvider->getName()] = $serviceProvider;
    }
}

My issue is that nothing happens and I included the Whoops and also don't work. I setted multiple providers and most of them are the same of simple service provider, except Database and MvcDispatcherServiceProvider. After trying to initialize the debug bar as a service provider I tried to initialize directly on BootstrapApplication class and I get the following error:

Uncaught Error: Call to a member function detachAll() on null in vendor\snowair\phalcon-debugbar\src\Whoops\WhoopsServiceProvider.php:36

So I removed the Whoops temporarilly and my baseUri it's messed up. I defined a UrlServiceProvider just link simple servide provider, and my baseUri it's resolve to something like: http://mydomain.com/idr_report/, but using debugbar my uri is now public/.

I also tried to use de config/debugbar.php withou success. I checked everything else I just don't work for me. Below my environtment settings:

  • PHP 7.1.5
  • Phalcon 3.3.2
  • IIS 8.5
  • Windows Server 2012

Just to be clear past to use the debugbar I was using Whoops and everything was working fine.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant