От Rails 3.2 до Cake PHP 2.0. Как выполнить некоторые общие задачи Rails?

В мои намерения не входит сравнение или обсуждение того, какой фреймворк лучше. Я знаю мощь как CakePHP, так и Rails. Я уверен, что есть способ делать подобные вещи в обоих из них.

Итак, ситуация такая: в среде Rails я привык делать то, что хотел бы делать на CakePHP (некоторые из них я не нашел в документации).

Вот они:

Управление пакетами

В Rails у меня есть файл «Gemfile», где я записываю версию каждого «гема», используемого в приложении. Если я хочу обновить или понизить версию, я меняю версию и запускаю команду «обновить пакет». Как вы обновляете плагины? Используете ли вы такие инструменты, как GIT, для проверки каждой новой версии?

Миграции

Когда мне нужно изменить базу данных, я создаю пустой файл «миграции» с помощью консольной команды «rails generate migration». Затем в сгенерированный файл я добавляю изменения, например «переименовать_столбец: пользователи,: адрес,: местоположение». После этого я запускаю «rake db: migrate», и база данных переносится. Как это сделать на CakePHP?

Автоматизированное развертывание

Развертывание в Rails можно автоматизировать с помощью ruby ​​gem "Capistrano". По сути, я запускаю «cap production deploy» в командной строке. Затем, следуя инструкциям на странице «deploy.rb", он входит на сервер(ы), клонирует новейшую версию кода из репозитория git и создает резервную копию текущей версии, чтобы я мог выполнить откат. Он также может создавать символические ссылки для "общих" папок (например, пользовательские загрузки ), перекомпилировать ресурсы, запустить отложенные миграции, установить новые зависимости, перезапустить некоторые серверные процессы, перезапустить само приложение и может выполнять другие задачи командной строки.Есть ли что-то подобное в CakePHP?

Сжатие ресурсов

В Rails, когда я нахожусь в рабочем режиме, ресурсы CSS и JS автоматически компилируются в отдельные файлы и регенерируются после каждого развертывания. Это встроенная функция в Rails 3.1+. Возможно ли это в CakePHP?

Рабочие и фоновые задания

] Rails может использовать гем под названием «delayed_job», чтобы ставить в очередь задачи, которые будут выполняться в фоновом режиме «воркерами», например, отправка электронного письма после регистрации пользователя. Как вы это делаете?

Пространства имен для контроллеров

] Если я хочу создать интерфейс администратора или веб-службу (например, используя пространство имен «api») или пространство имен «мобильное», я просто создаю соответствующие папки в папке «контроллеры». Затем я помещаю туда контроллеры и создаю маршруты для доступа к ним. Как лучше всего это сделать на Cake?

Доступ к методам модели из представления

Кажется, CakePHP возвращает ассоциативный массив, когда я беру данные из базы данных, а не настоящие "объекты". Итак, я не могу получить доступ к методам модели. Предположим, мой класс UserModel предоставляет метод под названием «возраст», который вычисляет текущий возраст пользователя на основе его дня рождения. В Rails я мог бы сделать это в представлении: <%= @user.возраст %>. Мне нужно создать вспомогательное представление для этого на Cake? Например, calc_user_age($user); ?> (или что-то в этом роде) ? Другая ситуация: предположим, я хочу получить последний комментарий от пользователя и вставить в комментарий ссылку на связанный пост, используя заголовок поста. В Rails я бы сделал что-то вроде @user.comments.last.post.title, чтобы получить заголовок сообщения. Как я мог сделать это в Cake, не используя функцию "recursive=3", которая получает много ненужных данных?

Объединение областей действия модели

Предположим, у меня есть модель с именем Post. В Rails я могу создавать области видимости моделей и смешивать их по своему усмотрению. Если я хочу получить «5 последних опубликованных сообщений из категории «Программирование», упорядоченных по наиболее посещаемым», например, я бы назвал их так: «Post.published.from_category("programming").most_accessed.limit(5 )». Если мне нужны только черновики сообщений, упорядоченные по недавним, интегрированные с нумерацией страниц, я бы назвал «Post.drafts.recent.page(2)». Как лучше всего создавать и связывать области действия на CakePHP? Динамически строить массив условий и отправлять его как параметр для «найти»?

Тесты

Какие инструменты тестирования используются сообществом CakePHP? Мне нужно протестировать модели и их методы, протестировать контроллеры, их ответы и переменные, а также протестировать содержимое представлений (также взаимодействие с Javascript), создать фикстуры и т. д. Я также хотел бы знать, есть ли способ создать что-то вроде автотеста, которые запускают тесты после сохранения файла.

Ну, в основном это точки. Извините за длинный пост и за мой подверженный ошибкам и избыточный английский (я не носитель языка).Кроме того, я не эксперт. Так что тут я могу написать что-то не то.

Надеюсь, мы сможем хорошо поговорить. Спасибо!

12
задан Bruno Dias 6 June 2012 в 15:28
поделиться