gpt4 book ai didi

laravel-5 - laravel 5 如何知道我要使用哪个合约实现?

转载 作者:行者123 更新时间:2023-12-01 06:12:13 24 4
gpt4 key购买 nike

我对如何使用契约(Contract)感到困惑。我认为那是因为我没有使用过单元测试,所以对我来说合约的工作方式并不明显。

让我们看一下这段代码:

use Illuminate\Contracts\Auth\Guard;

...

public function __construct(Guard $auth)
{
$this->auth = $auth;

$this->middleware('guest', ['except' => 'getLogout']);
}

public function postRegister(RegisterRequest $request)
{
// Registration form is valid, create user...

$this->auth->login($user);

return redirect('/');
}
  1. 那么我怎么知道哪个类在这行 $this->auth->login($user) 中实现了合约的 login 方法?如果我想使用自己的类(class),该如何更改?

  2. 在 laravel 4 中,我编写了 Auth::user() 作为示例,我在任何 Controller 中的任何地方都使用了它并且它有效。现在我应该在 Controller 方法中注入(inject)一个契约(Contract)并像 $auth->user 那样使用它?

  3. 此外,如果我没弄错的话,契约(Contract)用于进行抽象。好吧,那么,如果我想为我自己的类建立一个新的接口(interface),然后有多个类实现我的接口(interface),我应该把代码写在哪里呢?我想不出一个例子,但让我们想象一下我需要实现一个用于启用/禁用灯的接口(interface),并且我有两种方法,如 on()off() 我有多种方法可以做到这一点。我需要为此创建新契约(Contract)吗?

最佳答案

我希望我能让你更清楚一点......

广告 1。您可以在 /vendor/laravel/framework/src/Illuminate/Foundation/Application.php(第 792 行附近的方法 registerCoreContainerAliases)检查默认绑定(bind)。如果您想创建自己的类或扩展现有类,我建议您查看 How to extend Laravel's Auth Guard class?http://laravel.com/docs/master/extending (这个更多关于 Laravel 4.x,但可能会给你一个想法)。

广告 2。实际上你仍然可以使用 Auth::user() 但我在构造函数或方法中注入(inject)了一个契约,并像 $this->auth->user 或 $auth->user 那样调用它。

广告 3。我有一个 /app/Repositories 文件夹,我在其中放置了我的接口(interface)和实现,因此按照您的示例,我将创建子文件夹 Lamp 并创建 LampInterfaceon()off() 方法,然后我会创建类似 Lamp.php 的东西来实现 LampInterface。接下来,我将在 /app/Providers 中创建一个服务提供者,例如带有绑定(bind)的 LampServiceProvider.php:

namespace Apps\Providers;

use Illuminate\Support\ServiceProvider;

class LampServiceProvider extends ServiceProvider {

/**
* Register the application services.
*
* @return void
*/
public function register()
{
$this->app->singleton(
'App\Repositories\Lamp\LampInterface',
'App\Repositories\Lamp\Lamp'
);
}
}

之后我会在/app/config/app.php 中注册新的服务提供商,最后我可以像这样注入(inject)我的界面:

public function switchLampOn(App\Repository\Lamp\LampInterface $lamp)
{
$lamp->on();
}

关于laravel-5 - laravel 5 如何知道我要使用哪个合约实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26828328/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com