В настоящее время я работаю над небольшим приложением с моделями, картами и контроллерами. Мой вопрос в том, что (потому что я не нашел ответа на какой-либо ответ), как с ним взаимодействует картатор (& контроллер), когда у нас возникает следующая ситуация.Model & Mapper relationship
$user = new UserModel();
$user->setId('21');
$userMapper = new UserMapper($user);
$userMapper->retrieve();
Это будет работать так хорошо, насколько это возможно, модель имеет идентификатор, с которым преобразователь может извлекать необходимые пользователю (и карта его обратно в объект пользователя).
Моя проблема заключается в том, как я могу обернуть этот код, я имею в виду, этот код очень сырой, и определенно не рекомендуется использовать его в контроллере. Я хочу, чтобы сократить его, но я не знаю точно, как:
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
без явного вызова?
Проблема заключается в том, что я не хочу разорвать шаблон сопоставления, поэтому Модель не должна обращаться к любому методу SQL/Mapper напрямую с помощью $model->find()
, но я не хочу иметь много кода только для первого создания mapper и делать это и т. д.
Надеюсь, вы меня немного поймете, я уже достаточно смущен, потому что я новичок во многих шаблонах и методах отображения/моделирования.
Не имеет смысла сразу следовать шаблону;) просто делайте все, что вам удобно. Шаблоны должны сэкономить ваше время и помочь вам разобраться, как решить что-то, но они не являются религией, за которой вы должны следовать. – openfrog