我有点搞不懂如何使用合同。我认为这是因为我没有使用单元测试,所以合同的工作方式对我来说并不明显。
让我们看看下面的代码:
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('/');
}login方法:$this->auth->login($user)?如果我想使用自己的类,我如何更改类呢?Auth::user()作为一个例子,我在任何控制器中都使用它,并且起作用。现在我应该在控制器方法中注入一个契约,并像使用$auth->user一样使用它?on()和off(),我有多种方法可以做到这一点。我需要为此建立新的合同吗?发布于 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:
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中注册新的服务提供者,最后我可以将接口注入如下:
public function switchLampOn(App\Repository\Lamp\LampInterface $lamp)
{
$lamp->on();
}https://stackoverflow.com/questions/26828328
复制相似问题