CakePHP класс, который можно использовать где угодно? - PullRequest
1 голос
/ 29 апреля 2011

У меня есть многодоменный сайт. В зависимости от домена, сайт должен вести себя соответственно.

Я создал помощника с именем CompanyInfo, в котором есть такие методы, как name () , phone () , email () и т. Д.

В зависимости от того, в каком домене вы находитесь, он возвращает правильную информацию.

Так, например, если мне нужно отобразить номер телефона для звонящего пользователя, я бы использовал $this->CompanyInfo->phone(), и он отобразит правильный номер телефона для пользователя в зависимости от домена.

Хорошо, это все хорошо, но не очень актуально. Реальная проблема в том, что мне нужна эта информация не только для просмотра. Помощники только для просмотра, хотя. Если я хочу получить доступ к этой информации из контроллера, мне нужно создать компонент для этого.

Я действительно не хочу, чтобы Помощник и Компонент делали одно и то же. Я бы предпочел, чтобы один класс обрабатывал это, а не копировал и вставлял логику.

Так каков наилучший способ иметь класс с методами, доступ к которым можно получить из контроллера, представления или даже модели?

Ответы [ 4 ]

1 голос
/ 30 апреля 2011

Это именно такая статическая информация (имя, телефонный номер, адрес электронной почты и т. Д.), Которую нужно отображать?Почему бы просто не добавить их в свою конфигурацию в core.php?

Что-то вроде

# in core.php
Configuration::write('Company.name', 'Acme Corp.');
Configuration::write('Company.email', 'joe@acme.com');

Затем вы можете получить эту информацию где угодно, используя

Configuration::read('Company.name');
0 голосов
/ 30 апреля 2011

а) для этого вы можете использовать libs в cake1.3

b) методы статической модели, в которые вы можете передавать содержимое и которые возвращают ожидаемое значение

echo Model::phone($data)
0 голосов
/ 30 апреля 2011

Вы можете получить доступ к модельным классам из любого места следующим образом: $companyInfoModel = ClassRegistry::init('CompanyInfo'); $phone = $companyInfoModel->phone();

0 голосов
/ 30 апреля 2011

Вы можете определить эту переменную в вашем app_controller, а затем легко использовать эти переменные в любом вашем контроллере, так как эти переменные установлены только оттуда.Вызовите эту функцию в своем классе конструкции.Я думаю, что это решит вашу проблему.

...