использовать компонент CakePHP внутри модели - PullRequest
15 голосов
/ 20 марта 2012

Как использовать компонент, который я создал в cakePHP внутри одного из моих классов моделей? Возможно ли это?

Если это так, пожалуйста, дайте мне знать, как я могу это сделать

Ответы [ 3 ]

26 голосов
/ 20 марта 2012

Это возможно, но довольно плохая практика в MVC фреймворке. Вам следует переосмыслить и реорганизовать свой код, если вы считаете, что вам нужно использовать компонент в модели, потому что что-то не так неправильно затем.

Считается, что компонент разделяет код между контроллерами, только между контроллерами.

Разделять повторно используемый код между моделями было бы поведением. Для представления это был бы помощник.

Если у вас есть какой-то действительно общий код, он должен быть lib или помещать его в папку / пространство имен Utility или создавать новое пространство имен. Проверьте существующие классы там, чтобы получить представление о том, что туда поместить.

Код не был предоставлен, поэтому невозможно дать реальную рекомендацию о том, как его реорганизовать. Однако способ, которым вы хотите использовать существующий код, не будет работать в контексте MVC, поэтому пришло время переосмыслить свой подход к тому, что вы пытаетесь сделать.

10 голосов
/ 20 августа 2014

Можно использовать компонент внутри модели (но я не могу комментировать, если это рекомендуется или рекомендуется).

Вдохновленный из оригинальный источник , пример дляиспользуйте компонент с именем 'Geocoder' в модели:

App::import('Component','GeoCoder');
$gc = new GeoCoderComponent(new ComponentCollection);

Затем вы можете использовать $gc для вызова функций компонента.

-

PSЯ не хочу поощрять плохие методы программирования, но иногда сжатые сроки (в реальных проектах) могут заставить разработчика принимать такие решения.

0 голосов
/ 24 октября 2015

@ AD7six

// Use anywhere
AuthComponent::user('id')

// From inside a controller
$this->Auth->user('id');

Из документации PHP для пирога они предоставляют AuthComponent::user('id'), чтобы его можно было использовать в местах, отличных от контроллера.

Может быть, мне нужно больше подсказки, но почему моя модель не должна иметь доступ к информации ACL?

...