Подтвердить что ты не робот

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

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

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

Это:

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

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

Миграция

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

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

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

Сжатие активов

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

Рабочие и справочные задания

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

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

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

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

Кажется, что CakePHP возвращает ассоциативный массив, когда я беру данные из базы данных, а не истинные "объекты". Таким образом, я не могу получить доступ к методам модели. Предположим, что мой класс UserModel предоставляет метод, называемый "возраст", который вычисляет текущий возраст пользователя в зависимости от его дня рождения. В Rails я мог бы сделать это в представлении: <% = @user.age% > . Мне нужно создать помощник представления для этого на 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), создать приборы и т.д. Я также знаю, есть ли способ создать что-то вроде автотеста, которые запускают тесты после сохранения файла.

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

Надеюсь, у нас будет хорошая беседа. Спасибо!

4b9b3361

Ответ 1

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

AFAIK нет обновленного и широко используемого менеджера пакетов. Обычно мы добавляем плагины с помощью git. Я думаю, что плагины равны драгоценным камням в RoR.

Изменить: теперь существует composer, который теперь используется CakePHP и много плагинов.

Миграция

Используйте плагин миграции CakeDC или построить в оболочке схемы.

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

Мы используем ткань. Afaik нет плагина для торта, который будет делать то, что я знаю.

Сжатие активов

Используйте этот плагин.

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

Просто поместите их в папку контроллера и используйте маршрутизатор для создания маршрутов для них. Точно так же вы описываете его для Rails.

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

А? Вы делаете это в Rails? Мне это не нравится. В CakePHP вы не должны этого делать, а IMO не в любом приложении MVC.

Установите нужные данные в представлениях из контроллера.

$this->set('data', $this->Model->yourMethod()); 

Рабочие и рабочие задания

Это можно сделать с помощью написания оболочек.

Цепочные модели

Цеповые модели в CakePHP выполняются через associations. И да, они были бы доступны, например, $this- > User- > Post- > find ('first'). Вы также можете построить сложные поисковые запросы и условия для нескольких таблиц.

Испытания

CakePHP использует phpunit для модульного тестирования. Прочитайте этот раздел об этом в книге CakePHP.

Моя рекомендация

Прочтите книгу: book.cakephp.org Он обязательно ответит на большинство ваших вопросов и покажет вам, как делать мысли. Качество документации версии 2.0 отлично.