Что такое концептуальная разница между symfony и cakephp?
Просто чтобы сбалансировать этот поток, вот почему я люблю symfony:
Концептуально, я бы сказал, разница заключается в следующем:
Лучший совет, который я могу дать, – это быстро попытаться создать свою собственную простую модель данных в обоих, и поэкспериментировать с некоторыми базовыми интерфейсами, и просто посмотреть, что лучше подходит для вашего собственного стиля кодирования. Я думаю, что обе структуры имеют очень активные и страстные сообщества пользователей, и вы не будете сожалеть о своем решении в любом случае.
Большая разница в том, как создаются модели: модели CakePHP написаны на PHP, а модели Symphony написаны на YAML и работают на Propel. Подход CakePHP более похож на ActiveRecord ROR (хотя это не совсем реализация AR). CakePHP, в общем, больше рельсов.
Документация и инструменты CakePHP, на мой взгляд, имеют более широкую целевую аудиторию, а синтаксис и помощники проще, но у вас еще нет возможности использовать PHP5 в качестве своей исключительной цели (для автозагрузки на самом деле это не так). В целом, я предпочитаю подход CakePHP, потому что он соответствует установленному стандарту, и я приветствую его организацию. Я бы также рекомендовал Kohana, потому что это PHP5.
Есть еще одна статья о переполнении стека по этому вопросу, хотя ее немного отличается в фокусе.
Изменить: я вернул Symfony, чтобы найти причины, по которым я сказал «нет», и придумал их – ваши мнения и пробег могут отличаться:
CakePHP также предлагает мертвые простые леса и легко понять инструменты CLI. Синтаксис CLI для Symphony для меня немного неудобен, а «CRUD» в Symfony просто не то же самое. Объедините это с синтаксисом действия Symfony's (awkard) и бросьте на плохо разработанный (и сложный для понимания) веб-сайт Symfony и предпочитайте стороннюю платную документацию (книги на Amazon), и у вас больше тиков в столбце cons.
Некоторые утверждения о CakePHP и ограничениях выше просто не соответствуют действительности. Запрос возможен. Вы просто должны знать, как это сделать. «Автоматический» CakePHP СУПЕР хорош, поэтому вы можете ударить по земле, используя FAST. Это БЫСТРЫЙ БЫСТРЫЙ каркас для развития (следовательно, почему он так сильно моделируется после RoR, который, очевидно, был большим успехом и шумом). Существует более совершенное поведение, чтобы получить данные, полученные по-разному, и сделать некоторые из этих более сложных запросов с несколькими короткими вызовами метода и параметрами массива.
Однако. Насколько я могу судить, никакая другая структура не имеет столько «автоматических» методов и классов. Торт принимает самые общие задачи и обеспечивает простой способ сделать это. Если вы действительно умны, вы будете выполнять большую часть своего кодирования на уровне модели и использовать файл app_model и app_controller и иметь чрезвычайно эффективное приложение.
Консоль отличная и всегда расширяется. Сообщество действительно удивительно, и есть много вкладов, которые помогут вам ускорить работу. Вы можете буквально архитектовать, а затем переместить «штуки» на место, чтобы быстро создавать приложение, потому что большая часть того, что вам понадобится, доступна. Вы не понимаете этого с любой другой структурой. Обычно вам приходится тратить больше времени на кодирование времени.
И, наконец. В то время как документация была отстающей, сейчас это намного лучше, и в то время как Cake также получил некоторые суровые отзывы во время отсутствия документации и периода версии 1.1 … Это было ВСЕГО хорошо, просто сильно упущено. С 1.2 и теперь Cake2 и Cake3 на горизонте … Вы увидите много мнений.
Я использовал CakePHP с 1.1. Я твердо верю в это. Я использовал его для огромных корпоративных сайтов. Это получает миллионы и миллионы обращений в день … Мы вышли из сферы таких вещей, как WordPress и Drupal для решений. Когда вы доберетесь до этого уровня для сайта типа CMS, я очень рад, что у него CakePHP. Аналогично, Symfony и CodeIgniter помогут вам в масштабировании. Я не могу сказать ничего плохого ни об одной из этих структур. Могу только сказать, что вы потратите меньше времени на кодирование и найдете более крупное сообщество (и супер дружественный канал IRC) с CakePHP.
Я просматриваю и документирую некоторые из моих ответов на вышеупомянутые комментарии о CakePHP, а некоторые из них (в некоторых случаях правильно) воспринимают ошибки.
Большие веб-сайты запускаются с использованием CakePHP, некоторые из них – Mozilla Addons, Scratch by MIT и Hot Scripts. В нижней части веб-сайта CakePHP ( http://cakephp.org ) есть большой список. Независимо от того, любой хороший разработчик должен иметь возможность создавать масштабируемый веб-сайт с использованием рамки, если структура не является полностью глупой (CakePHP не слишком глупый: D).
Это правда, что нет ни одного очень хорошего (бесплатного) учебника CakePHP, который проходит через каждую функцию фреймворка, но документация очень хорошо изложена и подробно. Все, что не ясно, может быть прояснено через группу Google и IRC, и мы приветствуем любые изменения и исправления в документации. Документация – это не просто основная проблема с разработчиками, так как многие вещи специфичны для приложений, и люди придумывают интересные советы и трюки, и поэтому каждый приглашается внести свой вклад (не просто комментарий!). Конечно, все модерируется, поэтому большая часть трещин / спама не добавляется.
Код является модульным, поскольку вы можете добавить новый код, который превосходит основные функции. Большая часть кода – это просто классы PHP. Это правда, что писать такую функциональность может быть бременем, и я не пробовал использовать альтернативные классы в качестве fillins. Да, он не обрабатывает другие ORM, поэтому вы застряли по умолчанию, но это должно быть исправлено в Cake3, который сможет смешать и сопоставить любые другие классы PHP по желанию (включая поддержку Propel и Doctrine).
CLI очень хорош, и его легко расширить для поддержки приложений. Одним из примеров является то, что я недавно разработал плагин оболочки, который автоматически установил бы любой другой CakePHP-плагин, который я проиндексировал из github. Взял около 5 часов, чтобы построить что-то чрезвычайно удобное и гибкое. Я уверен, что такая функциональность существует для Symfony, и она существует для RoR 🙂
Что касается Rails-подобных, это так, и это не так. Многие вещи схожи, в любом случае они являются структурами MVC, а CakePHP – для подхода «Соглашения против конфигурации». PHP4 поддерживает mucks с более сильным синтаксисом, который 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, поэтому у моего сообщения есть некоторые предвзятости.
В дополнение к существующим ответам, вы должны попробовать оба, если это возможно. Я использую как довольно много, так и в течение некоторого времени, предпочитают symfony.
но я уверен, что его не потому, что тот или иной лучше, а потому, что symfony подходит, как мой ум работает лучше, его ближе к тому, что я делаю, когда пишу программное обеспечение вне рамки, поэтому чувствует себя более интуитивно понятным. Я ожидаю, что другие могут найти свой ум, соответствующий парадигме другой структуры.
Сказав это, я действительно думаю, что объекты cakephp – это слабость, благодаря использованию массивов, а не объектов. (Это то, что периодически развивается во внутреннюю ненависть во мне, когда мне нужно делать что-то, что усложняет …) Они могут делать то же самое, но возвращают объекты, а не массивы, чтобы представлять данные, и я думаю, что большая часть проблемы, которые у меня есть, исчезнут – вы сможете добавить дополнительные функции в объекты данных для достижения того, что я хочу сделать, вместо того, чтобы писать функции в существующем классе модели и передавать их массив.
Модельный слой CakePHP – беспорядок. Попробуйте сделать простые вещи, такие как отношения «многие ко многим» между объектом «Категория» и «Объект», а затем получить все элементы в категории, которые имеют определенный набор свойств.
Подобно:
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) прямо из коробки. В основном вам придется написать много PHP-кода, чтобы добавить эти недостающие функции или использовать необработанные SQL-запросы, но основная цель структуры – избегать выполнения этих действий, чтобы вы могли сосредоточиться на приложении, которое вы так что вы не очень сильно выигрываете с CakePHP.
Есть множество других проблем, и все они действительно связаны с уровнем модели, включая проверку формы, привязанную к слою модели, необходимость иметь дело с беспорядочными многомерными массивами, вынуждая использовать raw sql и привязывая ваше приложение к определенной базе данных ,
Я бы сказал, используя symfony. Это более крупная структура может занять несколько дней, чтобы учиться, но это того стоит. Я собирался использовать CakePHP для проекта, над которым я работаю, после того, как я перешел к слишком многим из тех типов проблем, которые я переключил на symfony, и это было плавное плавание.
Еще одно отличие: Symfony разделен на 3 среды: разработка, производство и тестирование – CakePHP не может! Легко разрабатывать и тестировать продукт в одно и то же время
Cake 2.0 прекрасно загружает большинство классов, в которых вы нуждаетесь, тогда как в Symfony 2 я обнаружил, что каждый класс должен иметь многочисленные импортные версии в верхней части скрипта. Попытка запомнить все эти импорт почти невозможна , поэтому вам всегда нужна справочная информация.
например. Код контроллера Symfony 2 …
namespace Acme\HelloBundle\Controller; use Symfony\Component\HttpFoundation\Response; // bunch of other imports accumulate here... class HelloController { ...
Арг, ты. Хотя это может быть хорошей техникой OO для пуристов, это удлиняет время разработки (до свидания RAD). По крайней мере, с помощью Cake я могу быстро записать большинство простых вещей из памяти.