В чем разница между $ uses и $ this-> loadModel()?
CakePHPCookbook, Выпуск 2.
61:
$ this-> loadModel (»User», 2);
страница 62:
класс RecipesController расширяет AppController {
public $ uses = array ('Recipe', 'User');
Заранее благодарен!
ответ
Использование определяет, к каким моделям контроллер имеет доступ по умолчанию, если вы не определяете это, это будет модель для этого контроллера, т.е. UserController будет загружать Пользователя по умолчанию (и любые модели, определенные в использовании $ AppController's).
loadModel будет делать то же самое, но только там, где он называется, это лучше, если вам нужно использовать модель только в одном действии, а не в других.
У вас также есть возможность использовать ClassRegistry :: init ('Recipe') -> find ('all'); и т. д., который вернет один экземпляр модели для одного использования, но не добавит модель к карте объектов.
Что вы действительно должны спросить себя, почему вы загружаете модель в контроллер? В идеале у вас должны быть отношения между вашими моделями, например, если вы находитесь в контроллере рецептов, вы можете вызвать $ this-> Recipe и $ this-> Recipe-> User.
Я нахожу, что использование чаще всего встречается внутри оболочки, где по умолчанию нет прямого доступа к моделям.
Edited согласно комментарий РПС в
- 1. CakePHP loadModel не работает
- 2. LoadModel или Tableregistry CakePHP
- 3. CakePHP SQL Ошибка при попытке использовать loadModel
- 4. loadModel() вызывает неожиданную ошибку в Cakephp 3
- 5. loadModel always return true
- 6. Uses-Permission vs Uses-Feature
- 7. Почему модель loadModel() сохраняет дважды в db? Я использую CakePHP
- 8. как loadModel и модифицированное поле в другом контроллере Cakephp 2
- 9. CakePHP Рекурсивный не работает с loadModel и this-> set
- 10. Cakephp 3 - как зарегистрировать тип (loadmodel in controller)
- 11. cakephp - использование loadmodel и получение данных, связанных с загруженной моделью
- 12. Android Uses-Feature VS. Uses-Permision Optimization
- 13. loadmodel принятие плагин модель
- 14. loadmodel не работает почему?
- 15. Запросы бросать при использовании loadModel
- 16. В чем разница между android: uses-permission и uses-permission?
- 17. uses-sdk в AndroidManifest
- 18. Parent uses-feature android.hardware.location
- 19. C++ Reference Parameters Uses
- 20. FB.api post uses get
- 21. Используйте кратность $ this-> loadModel ('Model') или один массив?
- 22. Являются ли методы loadComponent, loadHelper и loadModel примерами cakephp для инъекций зависимостей?
- 23. CakePHP. Существует $ this-> loadModel, но сам файл не является моделью. Как оно?
- 24. cakephp: в чем разница между $ this-> loadModel() и App :: import ('Controller', 'PagesController');
- 25. Android: Как использовать «uses-library»?
- 26. OpenCL Alternative Modulo Uses, Advice
- 27. TimeZoneNames standard, daylight, generic uses
- 28. Стэнфорд Свернутая ошибка парсера зависимостей: loadmodel
- 29. Как использовать функцию библиотеки в виде cakephp?
- 30. Как использует атрибут «uses» в Ext.define?
«_ [...] каждый раз, когда метод управления называется модель будет added._» Не уверен, что именно вы пытаетесь сказать, но это не правильно, даже в старых версиях Cake. Почему я упоминаю старые версии Cake? Поскольку с 2.x модели [** ленивы загружены **] (http://book.cakephp.org/2.0/en/appendices/new-features-in-cakephp-2-0.html#models) , определение '$ uses' в одиночку не загружает ничего, модель будет загружаться только после того, как вы попытаетесь получить к ней доступ, см. [**' Controller :: __ isset() '**] (https://github.com /cakephp/cakephp/blob/2.5.5/lib/Cake/Controller/Controller.php#L352). – ndm
Спасибо большое. У меня есть этот фрагмент в Plugin JobDirectory, и он работает: класс JobCategoryNamesController расширяет JobDirectoryAppController { // public $ uses = array ('JobDirectory.JobCategoryName'); public function index() { //$this->loadModel('JobDirectory.JobCategoryName '); $ res = $ this-> JobCategoryName-> find ('all'); $ this-> set ('res', $ res); } } Как вы можете видеть, $ uses и $ this-> load прокомментированы. Как это работает? – jstar
Отредактировано согласно вашим комментариям ndm, я ошибся с моим первоначальным ответом. jstar по умолчанию JobCategoryNames будет использовать модель JobCategoryName, а любая из указанных в JobDirectoryAppController :: $ использует. Если вы укажете $ uses, вам нужно убедиться, что у вас есть JobCategoryName в массиве, чтобы он продолжал работать. – HelloSpeakman