Как использовать хелпер внутри функции модели в CakePHP - PullRequest
3 голосов
/ 05 марта 2011

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

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

Для простоты / согласованности я создаю все ссылки на продукты с помощью пользовательского помощника, и все, что мне нужно сделать, это передать строку продукта, а помощник создает для меня ссылку с любыми указанными параметрами. Единственное, что мне нужно - это сделать это в beforeSave (), чтобы я мог заполнить description_formatted.

В данный момент beforeSave () проверяет исходную строку описания, затем вызывает закрытый метод в модели, который соответствует каждому ключевому слову, запрашивает в БД соответствующую строку ... насколько я знаю.

Ответы [ 2 ]

2 голосов
/ 06 марта 2011

Как и любой другой MVC, Cake накладывает большие ограничения на соединение ваших классов. Это необходимо для того, чтобы дети-сценаристы стреляли себе в ногу. Тем не менее, для пирога есть обходной путь, если вам действительно нужно ладить: http://book.cakephp.org/view/933/The-App-Class

1 голос
/ 06 марта 2011

Как бы я это сделал?С помощником я бы заменил все фигурные скобки на ссылки, а когда пользователь наведет курсор на связанное слово, я бы назвал Ajax, который получит описание слова или ссылку или что-то еще, что вам нужно сделать.Таким образом, вы запрашиваете описание только тогда, когда это необходимо.

Если вы все еще настаиваете на использовании помощника - это просто класс в PHP, поэтому вы можете включить его в свою модель, создать объект этого класса и использоватьэто функции.

Третий вариант - создать свой собственный класс и использовать его как в Model, так и в Helper.

...