Php 模型及;映射关系

Php 模型及;映射关系,php,model-view-controller,model,datamapper,Php,Model View Controller,Model,Datamapper,我目前正在开发一个带有模型、映射器和控制器的小型应用程序。 我的问题是,(因为我没有找到任何匹配的答案),当我们遇到以下情况时,映射器如何与模型(和控制器)交互 $user = new UserModel(); $user->setId('21'); $userMapper = new UserMapper($user); $userMapper->retrieve(); 这将尽可能好地工作,模型有一个id,映射器可以使用该id检索所需的用户(并将其映射回用户对象) 我的问题是,我

我目前正在开发一个带有模型、映射器和控制器的小型应用程序。 我的问题是,(因为我没有找到任何匹配的答案),当我们遇到以下情况时,映射器如何与模型(和控制器)交互

$user = new UserModel();
$user->setId('21');
$userMapper = new UserMapper($user);
$userMapper->retrieve();
这将尽可能好地工作,模型有一个id,映射器可以使用该id检索所需的用户(并将其映射回用户对象)

我的问题是,我如何包装这段代码,我的意思是,这段代码是非常原始的,它肯定不是非常推荐在控制器中使用。 我想缩短它,但我不知道如何:

public function view($id)
{
     $user->find($id); // this seems always to be tied with the user object/model (e.g. cakephp), but I think the ->find operation is done by the mapper and has absolutly nothing to do with the model
     $view->assign('user',$user);
}
它应该看起来更像:

public function view($id)
{
    $mapper = $registry->getMapper('user');
    $user = $mapper->find($id);
    // or a custom UserMapper method:
    # $user = $mapper->findById($id);
    $view->assign('user',$user);
}
但这更多的是代码。 我是否应该在父控制器类中包含
getMapper
过程,以便在不显式调用它的情况下轻松访问
$this->\u mapper

问题是,我不想破坏映射器模式,因此模型不应该通过
$Model->find()
直接访问任何SQL/mapper方法,但我不想有很多代码只用于第一次创建映射器并执行此操作等

我希望你能理解我一点,我自己已经够糊涂了,因为我对许多模式和映射/建模技术都是新手

您的控制器不会直接访问UserModel和UserMapper,而是通过该服务进行访问。

您可以添加一个,例如


您的控制器不会直接访问UserModel和UserMapper,而是通过服务访问。

谢谢;)但是我仍然需要调用控制器中的服务类。我不确定我是否理解您的问题是什么?您是否正在寻找依赖注入,例如@Gordon♦ : 可能该链接已更改为以下链接,请确认。谢谢;)但是我仍然需要调用控制器中的服务类。我不确定我是否理解您的问题是什么?您是否正在寻找依赖注入,例如@Gordon♦ : 可能该链接已更改为以下链接,请确认。直接遵循模式是没有意义的;)做任何你觉得方便的事。模式应该可以节省你的时间,帮助你找出解决问题的方法,但它们不是你必须遵循的宗教。直接遵循模式是没有意义的;)做任何你觉得方便的事。模式应该可以节省你的时间,帮助你找到解决问题的方法,但它们不是你必须遵循的宗教。
class UserService
{
    public function findUserById($id)
    {
        // copied and adjusted from question text
        $user = new UserModel();
        $user->setId($id);
        $userMapper = new UserMapper($mapper);
        return $userMapper->retrieve();
    }
}