симфония по сравнению с [закрытым] cakephp

System;
System.Collections;
System.Collections.Generic;
54
задан Adrien Schuler 2 May 2012 в 01:35
поделиться

6 ответов

Большая разница в том, как создаются модели: модели CakePHP написаны на PHP, а модели Symphony написаны на YAML и поддерживаются Propel. Подход CakePHP больше похож на ActiveRecord ROR (хотя это не совсем реализация AR). CakePHP, в целом, более рельсовый.

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

Есть другой пост о переполнении стека по этому вопросу, хотя его фокус немного отличается.


Edit: Я пересмотрел Symfony, чтобы найти причины, по которым я сказал «нет», и придумал следующие - ваши мнения и опыт могут отличаться:

CakePHP также предлагает мертвенно простые строительные леса и их легко использовать. разбираться в инструментах CLI. Синтаксис командной строки Symphony кажется мне немного шатким, а «CRUD» в Symfony - это совсем не то же самое. Объедините это с синтаксисом действий Symfony (awkard) и добавьте плохо спроектированный (и сложный для понимания) веб-сайт Symfony и предпочтение сторонней платной документации (книги на Amazon), и у вас будет больше отметок в столбце минусов.

s Синтаксис CLI мне немного неестественен, а 'CRUD' в Symfony совсем не то же самое. Объедините это с синтаксисом действий Symfony (awkard) и добавьте плохо спроектированный (и сложный для понимания) веб-сайт Symfony и предпочтение сторонней платной документации (книги на Amazon), и у вас будет больше отметок в столбце минусов.

s Синтаксис CLI мне немного неестественен, а 'CRUD' в Symfony совсем не то же самое. Объедините это с синтаксисом действий Symfony (awkard) и добавьте плохо спроектированный (и сложный для понимания) веб-сайт Symfony и предпочтение сторонней платной документации (книги на Amazon), и у вас будет больше отметок в столбце минусов.

22
ответ дан 7 November 2019 в 07:38
поделиться

Просто чтобы сбалансировать этот поток, вот почему мне нравится symfony:

  • использует PHP5
  • , он запускает некоторые действительно большие сайты, такие как Yahoo! Ответы, вкусные и Daily Motion .
  • хорошая документация. Учебник по jobeet на веб-сайте потрясающий. проведет вас по всем функциям, и после того, как вы закончите, вы почувствуете, что можете построить что угодно.
  • очень модульный ; многие компоненты Symfony работают сами по себе.
  • позволяет вам выбрать либо Propel , либо Doctrine в качестве ORM. Doctrine действительно великолепна и проста в использовании.
  • вы можете определять свои модели с помощью YAML или PHP, решать вам. Некоторым людям не нравятся файлы конфигурации, и вы действительно можете ограничить их использование, если хотите держаться подальше от YAML.
  • обновленный symfony cli (начиная с 1.2) просто великолепен. Я согласен с abales, до этой версии он был немного шатким, но теперь он очень хорошо документирован и следует предсказуемому формату.
  • Есть много, и я имею в виду много, сходства с ruby ​​on rails, за исключением того, что конечно, PHP не такой красивый и гибкий, как Ruby (!). Но, если вы поговорите с разработчиком тортов, они, вероятно, скажут обратное :)
  • генератор администратора symfony , который является шагом вперед по сравнению с CRUD (который также существует в symfony), является огромным экономит время. Используя вашу модель данных, он будет генерировать настраиваемые интерфейсы администрирования, дополненные списковыми представлениями (индексом), страницами создания и редактирования. Это не похоже на базовую грязь, когда он генерирует источник, а вы входите и изменяете его ... Фактически вы можете определить, как выглядит каждое поле, какие поля вы хотите включить, какие дополнительные действия вы можете выполнять с каждым объектом и т. д.

Концептуально, я бы сказал, разница заключается в следующем:

  • CakePHP требует меньшего обучения. Если вы никогда не использовали фреймворк MVC, Cake будет проще подобрать и запустить с ним за короткий промежуток времени.
  • Symfony кажется немного «больше», чтобы не сказать, что он медленный, но что там есть много кода, который позволит вам делать много действительно продвинутых вещей, когда вам нужно.

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

Я скажу, что разница в следующем:

  • CakePHP требует меньшего обучения. Если вы никогда не использовали фреймворк MVC, Cake будет проще подобрать и запустить с ним за короткий промежуток времени.
  • Symfony кажется немного «крупнее», если не сказать, что он медленный, но что там много кода, который позволит вам делать много действительно продвинутых вещей, когда вам нужно.

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

Я скажу, что разница в следующем:

  • CakePHP требует меньшего обучения. Если вы никогда не использовали фреймворк MVC, Cake будет проще подобрать и запустить с ним за короткий промежуток времени.
  • Symfony кажется немного «больше», чтобы не сказать, что он медленный, но что там есть много кода, который позволит вам делать много действительно продвинутых вещей, когда вам нужно.

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

  • Symfony кажется немного «больше», чтобы не сказать, что он медленный, но что там есть много кода, который позволит вам делать много действительно продвинутых вещей, когда вам нужно.
  • Лучший совет Я могу быстро попытаться создать вашу собственную простую модель данных в обоих, поэкспериментировать с некоторыми базовыми интерфейсами и просто посмотреть, какой из них лучше всего подходит вашему стилю кодирования. Я думаю, что у обеих платформ есть очень активные и увлеченные сообщества пользователей, и вы ни в коем случае не пожалеете о своем решении.

  • Symfony кажется немного «больше», чтобы не сказать, что он медленный, но что там есть много кода, который позволит вам делать много действительно продвинутых вещей, когда вам нужно.
  • Лучший совет Я могу быстро попытаться создать вашу собственную простую модель данных в обоих, поэкспериментировать с некоторыми базовыми интерфейсами и просто посмотреть, какая из них лучше всего соответствует вашему стилю кодирования. Я думаю, что у обеих платформ есть очень активные и увлеченные сообщества пользователей, и вы ни в коем случае не пожалеете о своем решении.

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

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

    68
    ответ дан 7 November 2019 в 07:38
    поделиться

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

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

    Сказав это, я действительно считаю, что объекты cakephp являются слабым местом из-за использования массивов, а не объектов. (Это то, что периодически перерастает во внутри меня в сильную ненависть, когда мне нужно сделать что-то, что это усложняет ...!) Они могли бы делать то же самое, но возвращать объекты, а не массивы для представления данных, и я думаю, что большая часть проблемы, которые у меня есть, исчезнут - вы сможете добавить дополнительные функции в объекты данных для достижения того, что я хочу делать, вместо того, чтобы писать функции в существующем классе модели и передавать им массив.

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

    Сказав это, я действительно считаю, что объекты cakephp являются слабым местом из-за использования массивов, а не объектов. (Это то, что периодически перерастает во внутри меня в сильную ненависть, когда мне нужно сделать что-то, что это усложняет ...!) Они могли бы делать то же самое, но возвращать объекты, а не массивы для представления данных, и я думаю, что большая часть проблемы, которые у меня были, исчезли бы - вы могли бы добавить дополнительные функции в объекты данных для достижения того, что я хочу делать, вместо того, чтобы писать функции в существующем классе модели и передавать им массив.

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

    Сказав это, я действительно считаю, что объекты cakephp являются слабым местом из-за использования массивов, а не объектов. (Это то, что периодически перерастает во внутреннюю ненависть, когда мне нужно сделать что-то, что это затрудняет ...!) Они могли бы делать то же самое, но возвращать объекты, а не массивы для представления данных, и я думаю, что большинство из них проблемы, которые у меня есть, исчезнут - вы сможете добавить дополнительные функции в объекты данных для достижения того, что я хочу делать, вместо того, чтобы писать функции в существующем классе модели и передавать им массив.

    Я ожидаю, что другие сочтут, что их разум соответствует парадигме другого фреймворка.

    Сказав это, я действительно считаю, что объекты cakephp являются слабым местом из-за использования массивов, а не объектов. (Это то, что периодически перерастает во внутри меня в сильную ненависть, когда мне нужно сделать что-то, что это усложняет ...!) Они могли бы делать то же самое, но возвращать объекты, а не массивы для представления данных, и я думаю, что большая часть проблемы, которые у меня есть, исчезнут - вы сможете добавить дополнительные функции в объекты данных для достижения того, что я хочу делать, вместо того, чтобы писать функции в существующем классе модели и передавать им массив.

    Я ожидаю, что другие сочтут, что их разум соответствует парадигме другого фреймворка.

    Сказав это, я действительно считаю, что объекты cakephp являются слабым местом из-за использования массивов, а не объектов. (Это то, что периодически перерастает во внутри меня в сильную ненависть, когда мне нужно сделать что-то, что это усложняет ...!) Они могли бы делать то же самое, но возвращать объекты, а не массивы для представления данных, и я думаю, что большая часть проблемы, которые у меня есть, исчезнут - вы сможете добавить дополнительные функции в объекты данных для достижения того, что я хочу делать, вместо того, чтобы писать функции в существующем классе модели и передавать им массив.

    (Это то, что периодически перерастает во внутреннюю ненависть, когда мне нужно сделать что-то, что это затрудняет ...!) Они могли бы делать то же самое, но возвращать объекты, а не массивы для представления данных, и я думаю, что большинство из них проблемы, которые у меня есть, исчезнут - вы сможете добавить дополнительные функции в объекты данных для достижения того, что я хочу делать, вместо того, чтобы писать функции в существующем классе модели и передавать им массив.

    (Это то, что периодически перерастает во внутреннюю ненависть, когда мне нужно сделать что-то, что это затрудняет ...!) Они могли бы делать то же самое, но возвращать объекты, а не массивы для представления данных, и я думаю, что большинство из них проблемы, которые у меня есть, исчезнут - вы сможете добавить дополнительные функции в объекты данных для достижения того, что я хочу делать, вместо того, чтобы писать функции в существующем классе модели и передавать им массив.

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

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

    9
    ответ дан 7 November 2019 в 07:38
    поделиться

    Я прохожу и документирую некоторые из моих ответов на вышеприведенные комментарии о CakePHP и некоторых из его (в некоторых случаях справедливо) воспринимаемых недостатков.

    Большие веб-сайты работают с использованием CakePHP, некоторые из них - Mozilla Addons, Scratch by MIT и Hot Scripts. Внизу веб-сайта CakePHP есть более крупный список ( http://cakephp.org ). Несмотря на, любой хороший разработчик должен иметь возможность создать масштабируемый веб-сайт с использованием фреймворка, если фреймворк не является полностью глупым (CakePHP не так уж и глуп: D).

    Это правда, что нет ни одного очень хорошего ( бесплатно) Учебник по CakePHP, в котором рассматриваются все функции фреймворка, но документация очень хорошо продумана и подробна. Все, что неясно, можно прояснить в группе Google и в IRC, и мы приветствуем любые изменения / исправления в документации. Документация - это не только основная проблема разработчика, так как многие вещи зависят от конкретного приложения, и люди придумывают интересные советы и рекомендации, поэтому каждый может внести свой вклад (а не только комментировать!). Конечно, все это модерируется, поэтому большая часть мусора / спама не добавляется.

    Код является модульным, так что вы можете добавлять новый код, который заменяет основные функции. Большая часть кода - это просто классы PHP. Верно, что написание такой функциональности может быть обузой, и я не пробовал использовать альтернативные классы в качестве заливок. Да, он не обрабатывает другие ORM, поэтому вы придерживаетесь значения по умолчанию, но это должно быть исправлено в Cake3, который сможет смешивать и сопоставлять любые другие классы PHP по желанию (включая поддержку Propel и Doctrine).

    Интерфейс командной строки очень хорош, и его легко расширить для поддержки конкретных приложений. Одним из примеров является то, что я недавно разработал плагин оболочки, который автоматически установит любой другой плагин CakePHP, который я проиндексировал с github. На создание чего-то чрезвычайно удобного и гибкого ушло около 5 часов. Я уверен, что такая функциональность существует для Symfony, и она существует для RoR: )

    Что касается Rails-подобного, то это так, и это не так. Многие вещи похожи, в конце концов, это MVC-фреймворки, а CakePHP придерживается подхода «Соглашения против конфигурации». Поддержка PHP4 мешает работе с более приятным синтаксисом, который, несомненно, есть в Symfony из-за поддержки только PHP5, но он по-прежнему чрезвычайно удобен и интуитивен. Фреймворк не предоставляет ВСЕ функции Rails из коробки, поскольку это не прямой клон. CakePHP - это фреймворк, а не библиотека (привет, Zend), поэтому он не предоставляет все сразу из коробки.

    Генерация представлений, я согласен, в CakePHP немного шаткая. В CakePHP 1.3 и 2.0 он значительно улучшен. Он будет поддерживать настраиваемые шаблоны для каждой модели, представления и контроллера (в отличие от простого вида представления, как сейчас). Также, на github существует набор задач оболочки, выполняемых пользователем neilcrookes, которые автоматически запекают только определенные типы представлений (включая только представления администратора), которые можно использовать в сочетании с настраиваемыми шаблонами для создания именно того, что вы хотите. Стили CSS также помогают :) но это определенно то, что можно улучшить.

    CakePHP принимает множество различных параметров в своих методах Model :: find, хотя в некоторых случаях может быть полезно использовать необработанные SQL-запросы. Метод Model :: find () очень гибкий и не подвел меня в плане создания сложных находок. Я полагаю, это связано с тем, чтобы привыкнуть к ORM, что неизбежно всегда требует времени.

    По логике, проверка формы должна быть на уровне модели, так как именно там выполняются любые действия, связанные с базой данных. Я считаю, что вы можете указать альтернативную проверку в конкретном представлении, или проверки подкачки (для этого есть поведение, но без него это было бы несложно).

    Многомерные массивы немного глупы, но вы все равно, вероятно, будете иметь многомерные объекты. В PHP4 была сломанная объектная модель, поэтому CakePHP не использует объекты. Это будет исправлено в будущей версии CakePHP (как я указал выше в предыдущем комментарии), но полезно иметь фреймворк, поддерживающий PHP4 в некоторых случаях. Опять же, YMMV и я согласны с тем, что полный PHP5 будет большим благом как с точки зрения скорости приложения, так и с точки зрения разработки.

    Базы данных могут быть заменены по желанию. CakePHP не поддерживает функциональность, присущую только одному типу БД (отсюда отказ от поддержки ENUM, которые есть только в MySQL), так что ORM всегда поддерживается и всегда может создавать действительные запросы. Вы можете иметь несколько баз данных в приложении, по одной для каждой модели, если хотите, и можете менять их местами по желанию или даже не использовать базу данных для конкретной модели. Так что нет, он не привязан к конкретной базе данных.

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

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

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

    12
    ответ дан 7 November 2019 в 07:38
    поделиться

    На модельном уровне CakePHP беспорядок. Попробуйте сделать простые вещи, например, установить связь «многие ко многим» между категорией и объектом Item, а затем получить все элементы в категории, для которых задано определенное свойство.

    Например:

    SELECT items.* FROM items, categories, item_categories WHERE item.available=1 AND category.id=1 AND item_categories.category_id = category.id
    

    Что-то настолько тривиальное невозможно в одном выражении с помощью метода find () модели.

    В базовом API также нет способа добавить одно отношение «многие ко многим», как в одном элементе в таблицу item_category выше. В Интернете есть пара решений, в том числе поведение, которое кто-то опубликовал в пекарне ( http://bakery.cakephp.org/articles/view/add-delete-habtm-behavior ), но это всего лишь ерунда, которая любая хорошая инфраструктура ORM, такая как Propel, Torque (Java), Hibernate (Java), SQLObject (Python), SQLAlchemy (Python), поддерживает прямо из коробки. В основном ты re либо придется писать много PHP-кода для добавления этих недостающих функций, либо использовать необработанные SQL-запросы, но основная цель фреймворка - избегать этих вещей, чтобы вы могли сосредоточиться на приложении, которое вы пишете, чтобы вы На самом деле, с CakePHP не так много.

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

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

    6
    ответ дан 7 November 2019 в 07:38
    поделиться

    Некоторые из заявлений о CakePHP и ограничениях выше просто не соответствуют действительности. Запрос возможен. Вам просто нужно знать, как это сделать. «Автомагия» CakePHP СУПЕР хороша, так что вы можете приступить к работе БЫСТРО. Это НАСКОЛЬКО БЫСТРЫЙ фреймворк для разработки (поэтому он так тщательно смоделирован после RoR, который, очевидно, имел большой успех и шум). Существуют более сложные варианты поведения, позволяющие получать данные, возвращаемые по-разному, и выполнять некоторые из этих более сложных запросов с помощью нескольких коротких вызовов методов и заданных параметров массива.

    Однако. Насколько я могу судить, ни один другой фреймворк не имеет такого количества "автоматических" методов и классов. Cake берет на себя самые обычные задачи и предоставляет простой способ их выполнить. Если ты действительно умный, ты Я буду выполнять большую часть вашего кодирования на уровне модели, использовать файлы app_model и app_controller и иметь чрезвычайно эффективное приложение.

    Консоль великолепна и постоянно расширяется. Сообщество действительно потрясающее, и есть много разных вкладов, которые помогут вам сделать работу еще быстрее. Вы можете буквально спроектировать, а затем перемещать «части» на место, чтобы очень быстро создать приложение, потому что большая часть того, что вам нужно, уже доступна. Вы не получите этого ни с одним другим фреймворком. Обычно вы должны тратить НАМНОГО больше времени на кодирование.

    Наконец. В то время как документация отставала, сейчас она намного лучше, и хотя Cake также получил несколько резких отзывов в период отсутствия документации и версии 1.1 ... Это было ВСЕГДА хорошо, только сильно игнорировалось. С 1.2 и теперь Cake2 и Cake3 на горизонте ... You ' Мы увидим, как многие мнения меняются.

    Я использую CakePHP с версии 1.1. Я твердо верю в это. Я использовал его для крупных корпоративных сайтов. Они получают миллионы и миллионы посещений в день ... Мы не в сфере решений вроде WordPress и Drupal. Когда вы дойдете до этого уровня для сайта типа CMS, я очень рад, что на нем есть CakePHP. Точно так же Symfony и CodeIgniter помогут вам с масштабированием. Я тоже не могу сказать ничего плохого ни об одном из этих фреймворков. Могу только сказать, что вы потратите меньше времени на кодирование и найдете более широкое сообщество (и супер-дружественный канал IRC) с CakePHP.

    re вне области таких вещей, как WordPress и Drupal для решений. Когда вы дойдете до этого уровня для сайта типа CMS, я очень рад, что на нем есть CakePHP. Точно так же Symfony и CodeIgniter помогут вам с масштабированием. Я тоже не могу сказать ничего плохого ни об одном из этих фреймворков. Могу только сказать, что вы потратите меньше времени на кодирование и найдете более широкое сообщество (и супер-дружественный канал IRC) с CakePHP.

    re вне области таких вещей, как WordPress и Drupal для решений. Когда вы дойдете до этого уровня для сайта типа CMS, я очень рад, что на нем есть CakePHP. Точно так же Symfony и CodeIgniter помогут вам с масштабированием. Я тоже не могу сказать ничего плохого ни об одном из этих фреймворков. Могу только сказать, что вы потратите меньше времени на кодирование и найдете более широкое сообщество (и супер-дружественный канал IRC) с CakePHP.

    14
    ответ дан 7 November 2019 в 07:38
    поделиться
    Другие вопросы по тегам:

    Похожие вопросы: