-
-
Notifications
You must be signed in to change notification settings - Fork 3.6k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[5.0]New method BaseController->prepareViewModel() to set the View Models, #39447
Conversation
This comment was marked as off-topic.
This comment was marked as off-topic.
@framontb sorry for the delay answering here. Can you add the comments and then we are ready to go. |
…ew param 2. Check setModel() method exists for $view
@laoneo I think the requested changes are done. |
Wouldn't make sense to check the view if it has the interface before calling the prepare function? |
Don't know, but the * @return ViewInterface Reference to the view or an error.
*
...
*/
public function getView($name = '', $type = '', $prefix = '', $config = array()) |
OK then it's not needed |
Thank you very much for your contribution! |
Summary of Changes
Changes to ease the use of multiple models in one view for custom (or core) components in Joomla 4.
By moving just three lines of code from
BaseController->display()
to a new method
BaseController->setViewModel($view)
,you can easily assign the models you want to any of your views.
Everything works exactly the same. The method is called at the same point the lines were before.
But the diference is:
DisplayController
of your custom component like this:Here you see that you don't need to touch your
DisplayController->display()
method to assign the models.Nor call to Factories. All you need is already in the
DisplayController
with minimum code.You only overwrite the
DisplayController->setViewModel()
, call the parent (that assigns the default model as usual),and assigns a couple of new models to the "Foos" view.
Now you only have to call it properly and easily in your view, like this:
Here you see how to call the methods of the Second and Third Model.
Just like it is described here: Using multiple models in an MVC component
Only now, you don't need to care about custom
display()
methods in your views.The default
display()
works perfectly fine.Testing Instructions
I developed this little Component com_foos to test the changes.
You only need to apply the changes to your Joomla 5 installation and install the component as usual.
Actual result BEFORE applying this Pull Request
Break MVC model to call several models for one view, using factories called in helpers,
or need to rewrite your own
DisplayController->display()
.See How can I use two models in my custom component view in Joomla4?
Expected result AFTER applying this Pull Request
If you pick in the Backend > Component > COM_FOOS menu link, you will see:
Each one of this messages, coming from a different model attached to the Foos View.
If you create a menu link in the FronEnd of the testing site, for the com_foos component as usual, you will see:
Each one of this messages, coming from a different model attached to the Foo View.
Note that the THIRD model is a backend model. You can assign it exactly the same way.
Link to documentations
Please select:
Documentation link for docs.joomla.org: Not specified yet
No documentation changes for docs.joomla.org needed
Pull Request link for manual.joomla.org:
No documentation changes for manual.joomla.org needed