Модели и контроллеры CakePHP в подпапках

Когда накапливается больше 20 контроллеров и моделей, то начинает казаться не такой уже и хорошей идея жёсткого закрепления папок, куда нужно помещать файлы определённого типа. Конечно, есть $modelPaths и $controllerPaths, но каждый раз назначать их вручную не так уж и приятно.

PHP:
  1. $modelPaths = array('/path_to_model_folder_A/', '/path_to_model_folder_B/');

В посте cakebaker.42dh.com/2007/11/22/organizing-your-code-with-folders/ рассказывается, что в последних версиях CakePHP можно создавать любые подпапки и Cake сам поймёт, где что искать.
Но у меня, во-первых, не получилось сходу это сделать и некоторые проекты не могут работать на последних night-билдах. Поэтому я использую альтернативное решение (почти всё одолжено отсюда - bakery.cakephp.org/articles/view/flexible-controller-and-modelpaths)

Просто добавьте этот код в config/bootstrap.php

PHP:
  1. function getSubFolders($baseDir) {
  2.     $result = array();
  3.  
  4.     $cwd =getcwd();
  5.     chdir($baseDir);
  6.     $dirs = glob("*", GLOB_ONLYDIR);
  7.     if (sizeof($dirs)> 0) {
  8.         foreach($dirs as $dir) {
  9.             $result[] = $baseDir.DS.$dir.DS;
  10.         }
  11.     }
  12.     chdir($cwd);
  13.  
  14.     return $result;
  15. }
  16.  
  17. $modelPaths = array_diff(getSubFolders(APP . 'models'), array('behaviors', 'datasources'));
  18. $controllerPaths = array_diff(getSubFolders(APP . 'controllers'), array('components'));


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

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

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

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

RSS feed | Trackback URI

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

2007-12-04 23:40:24

Владимир, у вас нигде не написано про перепечатку материалов. Скажите, можно ли скопировать то что касается CakePHP на http://cake-php.ru/wiki/ ? Разумеется со ссылкой на вас.

 
2007-12-05 00:58:25

Можно. Я всё собирался сам это сделать, но еле нахожу время для блога, заполнять ещё и в wiki довольно тяжело. Если кто-то это сделает за меня да ещё и ссылку поставит - то я буду только благодарен :))

Главное - распространять идеи Cake по всему миру :)

 
2007-12-05 07:22:43

Хорошо, как вы поняли, я работаю над этим проектом, поэтому займусь, хотя времени тоже весьма ограниченное количество :-)

 
2007-12-05 07:30:53

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

 
2007-12-05 08:51:48

Я тоже сразу заметил, что поддерживаются только папки первого уровня и хотел сделать рекурсию. Но потом подумал, что если нужно так много папок, то значит что-то не так с архитектурой. В таких случаях лучше создавать разные приложения. Поэтому оставил как есть.

 
Comment by Евгений
2007-12-05 10:55:48

Хорошая идея, но как же каталоги behaviors, datasources и components?
Их неплохо было бы исключить

 
2007-12-05 11:41:00

@Евгений: О, спасибо. Обновил код.

 
Comment by hemper Subscribed to comments via email
2007-12-05 20:04:27

А как на счет конфликта названия файлов ?

Если например будет так dir1/blabla.php и dir2/blabla.php все поломаеться ;(

 
2007-12-05 21:28:17

Поломается, конечно. Не надо так делать :)

 
Comment by hemper Subscribed to comments via email
2007-12-06 00:41:51

Я просто указал на потенциальную проблему ;) если бы кто-либо захотел это сделать..

Так что следует избегать одинаковых названий в конечных точках!

 
Имя (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.