Модели и контроллеры CakePHP в подпапках
Когда накапливается больше 20 контроллеров и моделей, то начинает казаться не такой уже и хорошей идея жёсткого закрепления папок, куда нужно помещать файлы определённого типа. Конечно, есть $modelPaths и $controllerPaths, но каждый раз назначать их вручную не так уж и приятно.
В посте 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
-
function getSubFolders($baseDir) {
-
-
foreach($dirs as $dir) {
-
$result[] = $baseDir.DS.$dir.DS;
-
}
-
}
-
-
return $result;
-
}
-
Владимир, у вас нигде не написано про перепечатку материалов. Скажите, можно ли скопировать то что касается CakePHP на http://cake-php.ru/wiki/ ? Разумеется со ссылкой на вас.
Можно. Я всё собирался сам это сделать, но еле нахожу время для блога, заполнять ещё и в wiki довольно тяжело. Если кто-то это сделает за меня да ещё и ссылку поставит - то я буду только благодарен :))
Главное - распространять идеи Cake по всему миру
Хорошо, как вы поняли, я работаю над этим проектом, поэтому займусь, хотя времени тоже весьма ограниченное количество
А еще можно вызов функции включить в цикл, тогда при помощи рекурсии получим возможность неограниченной вложенности.
Я тоже сразу заметил, что поддерживаются только папки первого уровня и хотел сделать рекурсию. Но потом подумал, что если нужно так много папок, то значит что-то не так с архитектурой. В таких случаях лучше создавать разные приложения. Поэтому оставил как есть.
Хорошая идея, но как же каталоги behaviors, datasources и components?
Их неплохо было бы исключить
@Евгений: О, спасибо. Обновил код.
А как на счет конфликта названия файлов ?
Если например будет так dir1/blabla.php и dir2/blabla.php все поломаеться ;(
Поломается, конечно. Не надо так делать
Я просто указал на потенциальную проблему
если бы кто-либо захотел это сделать..
Так что следует избегать одинаковых названий в конечных точках!