2015-12-16 3 views
0

Это для CakePHP 3.0логики в CakePHP 3.0 зрения

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

У меня есть несколько мыслей, ни один из которых кажутся очень элегантно:

  1. $ это в контексте выполнения CTP файла является класс View. Поместите методы класса View для вызова $ this-> function() в файле .ctp. Это кажется неправильным разделением труда, тем более, что помощники, похоже, предназначены для этого. Кроме того, функции будут доступны всем файлам ctp.

  2. Создать помощник. Это похоже на «лучший» способ, но этот помощник всегда загружается и подвергается воздействию всех .ctp-файлов, которые, похоже, нарушают сдерживание, поскольку логика относится только к виду одного действия. В отсутствие лучшего решения это маршрут, который я принимаю.

  3. Создайте подкласс View для этого элемента/модели и поместите туда логику, чтобы получить доступ, как в (1). Это кажется самым элегантным решением, но похоже, что подклассическое представление предназначено для альтернативных носителей (например, PDF), и я не вижу, как направить Cake на использование этого класса при создании представления для действия данного контроллера.

  4. Переместите функцию inline в .ctp-файл. Я даже не уверен, что это будет работать правильно, и кажется уродливым поставить функции в .ctp-файл.

Любой совет?

ответ

1

Ну, вы не объясняете, какую супер сложную логику вы хотите использовать, поэтому я бы сказал, идите на 3). Это вполне возможно, you can load helpers in a view files:

$this->loadHelper('MyFancyLogic'); 

Вы также можете оформить view cells. Но опять же, вы не объясняете, какую проблему вы пытаетесь решить, трудно рекомендовать что-то конкретное. Поэтому я бы сказал, что это помощник или камера зрения.