需要通过示例了解laravel服务容器和服务提供者。。在此先感谢
答案 0 :(得分:0)
服务容器是您注册服务的地方。
服务提供商通过将服务添加到容器中来提供服务。
通过 Laracast 引用。小心了解。
服务容器:https://laracasts.com/series/laravel-from-scratch-2017/episodes/24
服务提供商:https://laracasts.com/series/laravel-from-scratch-2017/episodes/25
答案 1 :(得分:0)
您好,欢迎来到stackoverflow!
服务容器是我们的应用程序bindings
的存储位置。 服务提供商是我们将绑定注册到服务容器的类。在较旧的Laravel版本中,我们没有这些提供程序,人们总是在问将绑定放在何处。答案令人困惑。 “最有意义的地方。”!然后,Laravel引入了这些服务提供商和 Providers 目录,以方便人们使用。
为了易于理解,我将提供一个基本示例:
interface AcmeInterface {
public function sayHi();
}
class AcmeImplementation implements AcmeInterface {
public function sayHi() {
echo 'Hi!';
}
}
// Service Container
$app = new \Illuminate\Database\Container;
// Some required stuff that are also service providing lines
// for app config and app itself.
$app->singleton('app', 'Illuminate\Container\Container');
$app->singleton('config', 'Illuminate\Config\Repository');
// Our Example Service Provider
$app->bind(AcmeInterface::class, AcmeImplementation::class);
// Example Usage:
$implementation = $app->make(AcmeInterface::class);
$implementation->sayHi();
如您所见;
bootstrap/app.php
内为我们完成了此操作)config/app.php
内部)答案 2 :(得分:0)
服务提供商
服务提供者是所有Laravel应用程序引导的中心位置。您自己的应用程序以及Laravel的所有核心服务都是通过服务提供商引导的。
因此,每当要将服务注入其他服务时,都可以将其添加到构造函数或方法中,并由服务提供商自动从服务容器中注入。
让我们看一个简单的例子来理解它。
class MyDemoClass
{
public function __construct(AwesomeService $awesome_service)
{
$awesome_service->doAwesomeThing();
}
}
服务容器
我将通过一个现实世界来简化它 假设您的应用程序需要Facebook的PHP SDK来访问Facebook的API,并且您的控制器是这样的:
<?php
namespace App\Http\Controllers;
use App\User;
use App\Http\Controllers\Controller;
use Facebook\Facebook;
class FacebookApiAccessController extends Controller
{
protected $facebook;
public function __construct(Facebook\Facebook $facebook)
{
$this->facebook = $facebook;
}
//.. action methods here
}
现在,您需要告诉Service Container如何构造Facebook\Facebook
的实例。
<?php
$container->singleton('Facebook\Facebook', function() {
return new \Facebook\Facebook([
'app_id' => config('services.facebook.app_id'),
'app_secret' => config('services.facebook.app_secret'),
'default_graph_version' => 'v2.10',
]);
});
注意,我将方法称为“单一”而不是“绑定”。唯一的区别是,缓存了用“单例”注册的服务,随后的解析服务的调用返回了缓存的服务。
最后,我建议您阅读this article以了解并了解 服务容器,依赖注入和 反思。