I’m using the MVC pattern in my application.
Now I need the view object in a model.
I don’t want to add the view as a parameter for my function in the model (since I need it in other functions as well). And I don’t want to keep on passing it.
Should a add the view as an attribute for the constructor of the model?
Is there another way? Shouldn’t I be needing the view object in the model in the first place?
What would be the preferred way of doing it?
Example:
Controller
function someAction()
{
$somemodel->add();
}
Model
class SomeModel()
{
function add()
{
if ($view->user) {
// do stuff
$this->mail();
} else {
// do other stuff
}
}
function mail()
{
Mailer::send($view->user->email, $this->getitems(), $view->layout);
}
function getitems()
{
return Items::getitems($view->user);
}
}
If you’re really doing MVC, then you won’t need the view in the model, because only the controller should have access to the view.
Looking at the code you’ve provided, I can tell one thing: the
add()method should not reference$viewin any way (even for accessing its properties). Instead, the model should be provided with the$view->uservalue from the controller. The same goes for themail()method.Consider fixing those issues. Otherwise, you’ll get into something worse later on.