首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >路由模型绑定目标到抽象类

路由模型绑定目标到抽象类
EN

Stack Overflow用户
提问于 2015-02-07 19:21:42
回答 2查看 679关注 0票数 1

假设以下模型结构:

代码语言:javascript
复制
namespace MyApp\Models;

abstract class Person{

    abstract function getName();
}

然后,我将其付诸实施:

代码语言:javascript
复制
namespace MyApp\Models;

class Employ extends Person{

    public function getName(){
        return "Employ";
    }
}

同样适用于用户:

代码语言:javascript
复制
namespace MyApp\Models;

class Employ extends User{

    public function getName(){
        return "User";
    }
}

有趣的..。我使用自己的解析逻辑int路由绑定上述模型。

代码语言:javascript
复制
Route::bind('person', function($value)
{
    // this method returns an instace of Employ OR User
    $person = load_person_from_db($value);
    return $person;
});

Route::get('test/{person}', function(MyApp\Models\Person $person){
    return $person->getName();
});

问题出在哪里?当我进入网址时..。

代码语言:javascript
复制
 http://example.com/test/1

触发以下异常的...the:

代码语言:javascript
复制
BindingResolutionException in Container.php line 785: 
Target [MyApp\Models\Person] is not instantiable.

是的!,我知道Person不是可实例化的,但是为什么laravel现在不返回我加载的实例呢?$person = load_person_from_db($value);

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-07 20:37:29

Laravel试图解决注入到路由关闭中的依赖关系。解决方案是简单地删除提示类型:

代码语言:javascript
复制
Route::get('test/{person}', function(MyApp\Models\Person $person){
    return $person->getName();
});

有趣的是,Laravel确实检查参数是否已经通过模型绑定解决了。然而,问题在于,它通过比较类来做到这一点:

Illuminate\Routing\RouteDependencyResolverTrait

代码语言:javascript
复制
protected function alreadyInParameters($class, array $parameters)
{
    return ! is_null(array_first($parameters, function($key, $value) use ($class)
    {
        return is_object($value) && get_class($value) === $class;
    }));
}

因此,由于类型提示显示为Person,但模型绑定返回其他内容,Laravel试图通过IoC容器解决依赖关系。

票数 1
EN

Stack Overflow用户

发布于 2021-08-05 05:15:05

您可以使用app()->bind(%抽象类%,%实现%)(例如,在控制器的__construct方法中),路由器将解析您的模型

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28386325

复制
相关文章

相似问题

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