Общая папка для ядра CakePHP

Многие знают, что можно использовать общую папку CakePHP, а в папках проектов оставлять фактически содержимое папки app. Это упрощает поддержку - нужно обновлять cake только в одном месте.

Но часто приложение работает на нескольких компьютерах. Например, у меня есть 3 основных места в которых я их запускаю: мой компьютер (здесь можно делать что угодно), общий локальный сервер компании (здесь код, который работает, но в стадии тестирования) и production-сервер (Интернет или локальная сеть клиента). Некоторые из них под Windows, некоторые под FreeBSD. Поэтому никак нельзя сделать, чтобы путь был одним и тем же.

А душа просит одного кода без всяких trunk. Поэтому я пишу в app\webroot\index.php вместо

PHP:
  1. if (!defined('CAKE_CORE_INCLUDE_PATH')) {
  2.      //define ('CAKE_CORE_INCLUDE_PATH', 'FULL PATH TO DIRECTORY WHERE CAKE CORE IS INSTALLED. DO NOT ADD A TRAILING DIRECTORY SEPARATOR');
  3.      //You should also use the DS define to separate your directories
  4.      define('CAKE_CORE_INCLUDE_PATH', ROOT);
  5. }

вот это

PHP:
  1. if (!defined('CAKE_CORE_INCLUDE_PATH')) {
  2.      if (is_dir('/home/www/cake')) {
  3.         define('CAKE_CORE_INCLUDE_PATH', '/home/www/cake');
  4.      } elseif (is_dir('c:/output/common')) {
  5.         define('CAKE_CORE_INCLUDE_PATH', 'c:/output/common');
  6.      } else {
  7.         define('CAKE_CORE_INCLUDE_PATH', ROOT);
  8.      }
  9. }

Мне этого хватает. Но для универсальности можно сделать так

PHP:
  1. if (!defined('CAKE_CORE_INCLUDE_PATH')) {
  2.     // you should list possible directories with cake here
  3.     $corePaths = array('/home/www/cake', 'c:/output/common');
  4.    
  5.     foreach ($corePaths as $corePath) {
  6.         if (is_dir($corePath)) {
  7.             define('CAKE_CORE_INCLUDE_PATH', $corePath);
  8.             break;
  9.         }
  10.     }
  11.    
  12.     if (!defined('CAKE_CORE_INCLUDE_PATH')) define('CAKE_CORE_INCLUDE_PATH', ROOT);
  13.    
  14.     unset($corePaths, $corePath);
  15. }

Обратите внимание, что путь к папкам указывается без завершающего слеша; под Windows можно использовать / вместо \\ (хотя и советуют писать DS). В папке должна быть подпапка cake с ядром cake. Также я в эту папку кладу подпапку vendors в которой находится simpletest.


Понравилось?

  1. Подпишись через RSS
  2. Расскажи о http://php.southpark.com.ua друзьям.
    Все способы хороши: ICQ, E-mail, свой блог, комментарий в чужом блоге или сообщение на форуме
  3. Добавь статью на news2.ru, Хабрахабр или в закладки

Огромное спасибо!

И не стесняйтесь комментировать - у меня стоит плагин, который убирает rel="nofollow" у людей, которые написали больше 5 комментариев.

RSS feed | Trackback URI

6 комментариев »

Comment by Sam Subscribed to comments via email
2007-11-28 19:22:09

Только сейчас заметил, что не нахожу более глобального разделения, чем контроллеры :( Неужели и вправду нет чего-то подобного модулям в Zend Framework?

 
2007-11-28 21:43:28

@Sam:
components, helpers, behaviors, plugins. Разве этого мало?
Если тебе кажется, что да, то покажи на примере, чего именно нужно достичь.

 
Comment by Sam Subscribed to comments via email
2007-11-28 21:50:35

http://framework.zend.com/manual/en/zend.controller.modular.html

app/
default/
controllers/
blog/
controllers/
models/
views/
news/
controllers/
models/
views/

Хочется разделить приложение на независимые модули. Вот написал я, допустим, блог. В следующий проект я интегрирую его уже как продукт. Просто копируя модуль.

 
2007-11-28 23:24:22

Есть 2 варианта:
1. Рядом с папкой app создать папку blog. Тогда можно будет обращаться к нему как site.com/blog/, а по site.com будет выводиться приложение по-умолчанию - app.
Используется, когда не нужно взаимодействие между модулями.

2. Plugins - http://manual.cakephp.org/chapter/plugins
Из основного приложения можно вызывать методы плагина.
Плагины можно как копировать в нужные приложения, так и вынести в общую папку, чтобы использовать всеми приложениями. Очень похоже на то, что ты ищешь.
Сравни: Cake - /pluginname/controllername/action; Zend - :module/:controller/:action/*
Кто-то у кого-то тырит идеи :). Я думаю, что все у Rails, но могу ошибаться.

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

 
2007-11-29 01:06:37

[...] предыдущем посте Sam, чей блог rmcreative.ru я сам читаю и часто кидаю ссылки [...]

 
2007-12-06 17:54:29

[...] предыдущем посте Sam, чей блог rmcreative.ru я сам читаю и часто кидаю ссылки [...]

 
Имя (required)
E-mail (required - never shown publicly)
URL
Текст комментария
You may use <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> in your comment.