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?
#0 [ <required> $dsn ]] in class PDO means something that has to do with the PDO connection .. how are you connecting to your db?
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.
Sign in to participate in this thread!
The Laravel portal for problem solving, knowledge sharing and community building.
The community