【发布时间】:2015-01-22 16:44:54
【问题描述】:
我的 Laravel 应用程序使用存储库模式。我还有一个名为EloquentRepository 的抽象类,其中包含基本方法。我所有的存储库都有一个update() 方法,在这里我只需使用 ID 和数组更新模型:
abstract class EloquentRepository {
public function update($id, array $array) {
$this->model->whereId($id)->update($array);
}
}
现在,我还有一个Server 存储库:
interface ServerRepository {
public function update($id, array $options);
}
class EloquentServerRepository extends EloquentRepository implements ServerRepository {
protected $model;
public function __construct(Server $model)
{
$this->model = $model;
}
}
所以现在,我不必将update() 方法添加到我的EloquentServerRepository,也不必添加任何其他需要这样做的存储库(很多)。
但是,有一个存储库确实具有更新功能,但我希望它做一些“自定义”的事情。假设它是用户存储库:
interface UserRepository {
public function update($id, array $options, $status);
}
class EloquentUserRepository extends EloquentRepository implements UserRepository {
protected $model;
public function __construct(User $model)
{
$this->model = $model;
}
public function update($id, array $options, $status)
{
$this->model->setStatus($status);
$this->model->whereId($id)->update($options);
}
}
所以现在,我的用户存储库需要每次更新的状态。
但是,我得到了错误:
Declaration of EloquentUserRepository::update() should be compatible with EloquentRepository::update($id, array $array).
为什么会这样,我的界面肯定指定了声明应该是什么?
【问题讨论】:
标签: php laravel repository-pattern