首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >laravel 5怎么知道我想用哪一种合同执行?

问laravel 5怎么知道我想用哪一种合同执行?
EN

Stack Overflow用户
提问于 2014-11-09 12:46:10
回答 1查看 2K关注 0票数 2

我有点搞不懂如何使用合同。我认为这是因为我没有使用单元测试,所以合同的工作方式对我来说并不明显。

让我们看看下面的代码:

代码语言:javascript
复制
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. 那么,我如何知道在这一行中哪个类实现了契约的login方法:$this->auth->login($user)?如果我想使用自己的类,我如何更改类呢?
  2. 在laravel 4中,我写了Auth::user()作为一个例子,我在任何控制器中都使用它,并且起作用。现在我应该在控制器方法中注入一个契约,并像使用$auth->user一样使用它?
  3. 而且,如果我做得对,契约就会被用来进行抽象。好的,如果我想为自己的类构建一个新的接口,然后有多个实现我的接口的类,那么我应该在哪里编写代码呢?我想不出一个例子,但让我们设想一下,我需要实现一个接口来启用/禁用lamp,我有两种方法,比如on()和off(),我有多种方法可以做到这一点。我需要为此建立新的合同吗?
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-28 22:12:24

我希望我能让你明白一点.

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

第2章.实际上,您仍然可以使用Auth::user(),但是我在构造函数或方法中注入了一个契约,并将其称为$this->auth->user或$auth->user。

Ad.3.我有一个/app/Repositories文件夹,在这里放置接口和实现,因此,为了遵循您的示例,我将创建子文件夹Lamp,并使用on()和off()方法创建LampInterface,然后创建类似于实现LampInterface的Lamp.php。接下来,我将在/app/Providers中创建一个服务提供者,比如具有绑定的LampServiceProvider.php:

代码语言:javascript
复制
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中注册新的服务提供者,最后我可以将接口注入如下:

代码语言:javascript
复制
public function switchLampOn(App\Repository\Lamp\LampInterface $lamp)
{
    $lamp->on();
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26828328

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档