Support the ongoing development of Laravel.io →
IOC Packages

Hi

I have developed a package for L4. This package is make be easy to CRUD ORM proccess for multi languages content.

My package works very well on my three project.

I have a problem which I can't solve to. This problem is about IoC and resolving a class in my package..

Firstly I want to share my package's service provider file


<?php namespace Muratsplat\Multilang;

use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Collection;
use Illuminate\Support\MessageBag;

use Muratsplat\Multilang\Picker;
use Muratsplat\Multilang\Validator;
use Muratsplat\Multilang\NewRules;
use Muratsplat\Multilang\Wrapper;
use Muratsplat\Multilang\CheckerAttribute;

/* MultiLang Service Provider
 * 
 * @author Murat Ödünç <murat.asya@gmail.com>
 * @copyright (c) 2015, Murat Ödünç
 * @link https://github.com/muratsplat/multilang Project Page
 * @license http://www.gnu.org/licenses/gpl-3.0.html GPLv3 
 */
class MultilangServiceProvider extends ServiceProvider {

	/**
	 * Indicates if loading of the provider is deferred.
	 *
	 * @var bool
	 */
	protected $defer = false;

	/**
	 * Bootstrap the application events.
	 *
	 * @return void
	 */
	public function boot()	{
            
            $this->package('muratsplat/multilang');

            // adding new rules for our extention
            $this->addNewRules();
            
            // setting laravel events object
            MultiLang::setEventDispatcher($this->app['events']);
        }

	/**
	 * Register the service provider.
	 *
	 * @return void
	 */
	public function register()
	{
            $this->app->singleton('multilang', function($app) {
                
                $config         = $app['config'];
                $schemaBuilder  = $app['db']->connection()->getSchemaBuilder();
                $validator      = $app['validator'];
                $cache          = $app['cache.store'];
            
                return new MultiLang(
                            new Picker(new Collection(), new Element(),$config),
                            $config,
                            new MessageBag(),
                            new Validator($validator, $config),
                            new Wrapper(
                                    $config, 
                                    new CheckerAttribute(
                                            $schemaBuilder, 
                                            $cache, 
                                            $config
                                            ),
                                    $cache                                    
                                    ),
                            $cache
                        );
            });
            
        
          
	}
            
        /**
         * to add new rules to Laravel Validator object
         */
        private function addNewRules() {
  
            $this->app['validator']->resolver(function($translator, $data, $rules, $messages) {
                
                return new NewRules($translator, $data, $rules, $messages);
            });
        }

	/**
	 * Get the services provided by the provider.
	 *
	 * @return array
	 */
	public function provides()
	{
		return array('multilang');
	}

}

For example this line works without any problem

   
            
       $multilang        = \App::make('multilang');
       

But when I want to inject MultiLang instance of MultiLang Pakage to a repository class by using constructer method, its getted errors about dependency resolving..

<?php

namespace Muratsplat\Repository\Product;

use Muratsplat\Multilang\MultiLang;

/**
 * Product Repository Class
 * 
 * @author Murat Ödünç <murat.asya@gmail.com>
 * @copyright (c) 2015, Murat Ödünç
 * @license http://www.gnu.org/licenses/gpl-3.0.html GPLv3
 * @package ProCategory
 */ 
class ProductRepository extends CacheAbleRepository 
{
    
    /**
     * @var \Muratsplat\Multilang\MultiLang 
     */
    private $multilang;
    
        /**
         * Constructer
         */
        public function __construct( MultiLang   $multilang )   {
          
            $this->multilang        = $multilang  //  my package's core class
        }
  }

When Unit test works, return this error..

 phpunit --stop-on-failure app/tests/controller/Front/FrontDownloadControllerTest.php 
PHPUnit 3.7.28 by Sebastian Bergmann.

Configuration read from /home/muratsplat/works/web_root/krk/phpunit.xml

E

Time: 1.17 seconds, Memory: 11.75Mb

There was 1 error:

1) FrontDownloadControllerTest::testSimple
Illuminate\Container\BindingResolutionException: Unresolvable dependency resolving [Parameter #0 [ <required> $dsn ]] in class PDO

/home/muratsplat/works/web_root/krk/vendor/laravel/framework/src/Illuminate/Container/Container.php:594
/home/muratsplat/works/web_root/krk/vendor/laravel/framework/src/Illuminate/Container/Container.php:566
/home/muratsplat/works/web_root/krk/vendor/laravel/framework/src/Illuminate/Container/Container.php:537
/home/muratsplat/works/web_root/krk/vendor/laravel/framework/src/Illuminate/Container/Container.php:428
/home/muratsplat/works/web_root/krk/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:462
/home/muratsplat/works/web_root/krk/vendor/laravel/framework/src/Illuminate/Container/Container.php:609
/home/muratsplat/works/web_root/krk/vendor/laravel/framework/src/Illuminate/Container/Container.php:570
/home/muratsplat/works/web_root/krk/vendor/laravel/framework/src/Illuminate/Container/Container.php:537
/home/muratsplat/works/web_root/krk/vendor/laravel/framework/src/Illuminate/Container/Container.php:428
/home/muratsplat/works/web_root/krk/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:462
/home/muratsplat/works/web_root/krk/vendor/laravel/framework/src/Illuminate/Container/Container.php:537/home/muratsplat/works/web_root/krk/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:78
/home/muratsplat/works/web_root/krk/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:51
/home/muratsplat/works/web_root/krk/vendor/laravel/framework/src/Illuminate/Routing/Router.php:967
/home/muratsplat/works/web_root/krk/vendor/laravel/framework/src/Illuminate/Routing/Route.php:109
/home/muratsplat/works/web_root/krk/vendor/laravel/framework/src/Illuminate/Routing/Router.php:1033
/home/muratsplat/works/web_root/krk/vendor/laravel/framework/src/Illuminate/Routing/Router.php:1001
/home/muratsplat/works/web_root/krk/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:775
/home/muratsplat/works/web_root/krk/vendor/laravel/framework/src/Illuminate/Foundation/Application.php:745
/home/muratsplat/works/web_root/krk/vendor/symfony/http-kernel/Symfony/Component/HttpKernel/Client.php:81
/home/muratsplat/works/web_root/krk/vendor/symfony/browser-kit/Symfony/Component/BrowserKit/Client.php:327
/home/muratsplat/works/web_root/krk/vendor/laravel/framework/src/Illuminate/Foundation/Testing/ApplicationTrait.php:51
/home/muratsplat/works/web_root/krk/vendor/laravel/framework/src/Illuminate/Foundation/Testing/ApplicationTrait.php:92
/home/muratsplat/works/web_root/krk/app/tests/controller/Front/FrontDownloadControllerTest.php:52


What can I do to solve it?

Last updated 2 years ago.
0
#0 [ <required> $dsn ]] in class PDO means something that has to do with the PDO connection .. how are you connecting to your db?
Last updated 9 years ago.
0

Hi @astroanu

My app connects to mysql database. The is no problem on database jobs. My app works very well but when ProductRepository calls by laravel. throws this exception: "Illuminate\Container\BindingResolutionException: Unresolvable dependency resolving"

I have solved my problem by changing injecting alternate way. This way is '$multilang= \App::make('multilang') in ProductRepository class.

0

Sign in to participate in this thread!

Eventy

Your banner here too?

muratodunc muratodunc Joined 14 Feb 2015

Moderators

We'd like to thank these amazing companies for supporting us

Your logo here?

Laravel.io

The Laravel portal for problem solving, knowledge sharing and community building.

© 2025 Laravel.io - All rights reserved.