我目前正在使用模型,映射器和控制器的小应用程序。 我的问题是,(因为我没有找到任何匹配的答案),当我们遇到以下情况时,映射器如何与模型(&控制器)进行交互。模型和映射关系
$user = new UserModel();
$user->setId('21');
$userMapper = new UserMapper($user);
$userMapper->retrieve();
这将工作得很好,模型有一个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->_mapper
?
问题是,我不想破坏映射器模式,所以模型不应该直接通过$model->find()
来访问任何SQL /映射器方法,但我不想有很多代码只是为了首先创建一个映射器和做到这一点,这等
我希望你能够理解我一点点,我自己已经够糊涂,因为我是新来的许多模式和绘图/建模技术。
马上跟随模式是没有意义的;)只要做一些对你来说很方便的事情。模式应该为你节省时间并帮助你找出解决问题的方法,但它们不是你必须遵循的宗教。 – openfrog 2010-01-04 18:19:54