2013-04-20 1 views
0

Это должно быть просто, но я потратил более часа, пытаясь понять это, поэтому спасибо за вашу помощь.CakePHP: использовать функцию от контроллера плагина в главном контроллере

У меня есть плагин CakePHP, Usermgmt, с контроллером, расположенным здесь:

./app/Plugin/Usermgmt/Controller/UsersController.php 

Я пытаюсь вызвать функцию, userIdFromUsernameAndPassword(), в этом контроллере от одного из моих главных контроллеров, используя что-то вроде :

$userID = $this->UsersController->userIdFromUsernameAndPassword('[email protected]','pass'); 

Что необходимо для импорта/включения/инициализации, чтобы иметь возможность работать?

Я пробовал различные операторы импорта, такие как App::uses('UsersController', 'Usermgmt.Controller'); в верхней части моего файла, но нигде не получил.

Спасибо!

ответ

2

Короткий ответ: используйте ООП и удлините другой контроллер. Также ознакомьтесь с MVC. Вы не должны использовать метод контроллера внутри другого контроллера, в CakePHP это должно выполняться как компонент. Их можно разделить между контроллерами. Check the CakePHP Book.

Также имя плагина и имя метода указывают, что это плохой плагин. Это звучит так, как будто кто-то не знал об компоненте Auth CakePHP. Опять же, проверьте книгу для AuthComponent. You want a custom authentication adapter.

Если пользователь зарегистрирован, вы можете получить свой идентификатор, вызвав $ this-> Auth-> user ('id'). Прочтите главу об Auth. Если вы хотите, чтобы правильно выполненный пользовательский плагин проверял: CakeDC Users

+0

Мои знания OOP и MVC взяты из Objective-C и Python, поэтому я немного борюсь с различиями между этими подходами и PHP. Я смотрел на пользователей CakeDC год назад, когда я начал этот проект, но либо я не мог заставить его работать, либо еще не был готов. Я знаю, как получить идентификатор пользователя, вызвав $ this-> Auth-> user ('id'), но это для API, так что пользователь не войдет в систему (пользователь/пароль передается с запросом Post) , – Nick

+0

Я понимаю, что вызов одного контроллера из другого - это неправильный способ сделать что-то здесь. Итак, каков был бы правильный способ ответить на вызов Post с пользователем/pass, проверить эти значения и предоставить им информацию из другой модели? – Nick

+2

@ nickv2002 Мне кажется, что 'userIdFromUsernameAndPassword()' должен быть методом 'User' * model *, например. Доступ к ней должен быть чем-то вроде «ClassRegistry :: init (« Usermgmt.User ») -> userIdFromUsernameAndPassword ('[email protected] ',' pass ');' вы не должны использовать другой ** контроллер ** для получения данных от ** Модели ** в MVC. Необязательно, оберните, если в * Компонент *, чтобы предоставить повторно используемый код, как было предложено. – thaJeztah

 Смежные вопросы

  • Нет связанных вопросов^_^