{{TOC}} == ((#why)) Почему Laravel? == **Laravel** - мощная среда программирования для PHP, сфокусированная на гибкости и выразительности. Новички в программировании получат простоту разработки, обеспечиваемую самыми известными и легковестными фреймворками для PHP; более опытные разработчики оценят возможность структурировать код так, как этого не позволяют другие аналогичные библиотеки. Гибкость //Laravel// позволит вашей компании обновлять и изменять приложение в соответствии с требованиями, а его выразительность поможет вашей команде писать удобный для чтения и краткий код. === Преимущества === Вот лишь некоторые моменты, которые нам кажутся наиболее значимыми: * **Пакеты** - система модулей //Laravel//. В хранилище пакетов уже есть множество интересных возможностей, которые вы с лёгкостью можете включить в своё приложение. Вы можете вручную установить пакет, скачав и распаковав его архив в папку **bundles**, либо используйте встроенный интерфейс командной строки "((док3:artisan/tasks Artisan))" для автоматической установки. * **Eloquent ((ВП:ORM))** - одна из самых продвинутых технологий ((ВП:ActiveRecord)) для PHP на сегодняшний день. Применяя ограничения к //зависимостям полей// ("relationships") и вложенным //активным загрузкам// ("eager loading") вы можете контролировать свои данные со всем удобством //ActiveRecord//. **Eloquent** поддерживает все методы объекта **Fluent** - интерфейса для создания запросов к базам данных. * **Логика приложения** может работать на принципах ((ВП:MVC)) ([[docs/v3/controllers контроллеры]] и [[docs/v3/views представления]]), с которой многие разработчики уже знакомы, либо регистрируя ((docs/v3/routing маршруты)) напрямую - похожий подход используется в среде разработки **Sinatra**. //Laravel// разработан с тем, чтобы дать разработчику максимальную свободу для создания как небольших сайтов, так и обширных корпоративных ресурсов. * **Обратная маршрутизация** позволяет создавать ссылки на //((docs/v3/routing#именованные)) ((docs/v3/routing маршруты))// - для этого вы передаёте только его имя и //Laravel// автоматически создаёт нужный URL. Это позволяет вам позже изменить базовые адреса маршрутов, а //Laravel// сам обновит их в вашем коде. * **((ВП:REST))-контроллеры** - оптимальное разделение **GET**- и **POST**-запросов в программной логике. Например, форма авторизации может генерироваться ((docs/v3/controllers#действи+я))ем %%get_login()%%, а %%post_login()%% может принять её данные, проверить и либо переадресовать обратно на страницу формы с сообщением об ошибке, либо открыть домашнюю страницу вошедшего пользователя. * **Автозагрузка классов** позволяет забыть вам о поддержании карты классов и о подключении скриптов, когда они не используются. Хотите использовать библиотеку или модель? Не волнуйтесь о её доступности, просто //используйте//. //Laravel// возьмёт всё прочее на себя. * **Составители представлений ("view composers")** - функции обратного вызова, выполняемые при загрузке //шаблона//. Скажем, боковое меню в блоге, содержащее список случайно выбранных статей. Ваш //составитель// содержит только код для загрузки этого списка, так что всё, что нужно - это передать его //шаблону// для формирования страницы. Таким образом, вам не нужно помнить, что этот //контроллер// должен загрузить данные из //модели// для передачи в //шаблон// при том, что сам его //контроллера// никак к ним не относится. * **((docs/v3/ioc IoC-контейнер))** позволяет создавать новые объекты и оптимально работать с //одиночками// ("singletons"). Это значит, что вам едва ли придётся кода-либо озаботится загрузкой сторонней библиотеки. Это также значит, что вы можете получить доступ к этим объектам из любого места вашего кода без необходимости разбираться с их зависимостями и особенностями загрузки. * **((docs/v3/database/migrations Миграции))** - система контроля версий структуры ваших баз данных, встроенная в ядро //Laravel//. Вы можете создавать и работать с ними через инструмент "((док3:artisan/tasks Artisan))". Как только другой разработчик вносит изменение в структуру БД вы можете обновить вашу локальную копию хранилища и интегрировать изменения. Теперь и у вас - последняя версия! * **Юнит-тесты** - важная часть //Laravel//, который сам по себе содержит сотни тестов с тем, чтобы удостовериться в безопастности внесённых вами изменений. Именно поэтому выпуски //Laravel// можно считать одними из самых стабильных. //Laravel// также позволяет вам писать собственные юнит-тесты для вашего кода и выполнять их используя "((док3:artisan/tasks Artisan))". * **Автоматическое создание страниц** ("pagination") позволяет не заботиться о генерации страничных результатов в вашем коде. Вместо определения текущей страницы, получения полного числа записей в БД и создания %%(t)LIMIT%% можно просто вызвать метод %%paginate()%% и сообщить //Laravel//, куда поместить результат в вашем шаблоне - //Laravel// позаботится об остальном. Страничный генератор разработан для простоты использования и изменения под любые нужды. Важно отметить, что просто потому, что //Laravel// может сделать всё это автоматически не значит, что вы не можете при необходимости сами вызывать нужные методы и настраивать их. Выше - всего лишь несколько примеров отличия //Laravel// от других фреймворков для PHP. В настоящей документации освещены эти и многие другие вопросы. === Структура === Структура папок //Laravel// знакома для разработчиков других PHP-фреймворков. Вёб-приложения любого масштаба могут быть с лёгкостью созданы используя имеющуюся структуру так же, как и в других средах разработки. Однако в //Laravel// также возможно создание уникальной структуры, разработанной специально для нужд отдельного проекта - это может быть особенно полезно при разработке крупных приложений - систем управления содержимым и других. Такая архитектурная гибкость - одно из уникальных отличий //Laravel//. == Сообщество == //Laravel// поддерживается быстро растущим сообществом программистов как на ((форум: русскоязычном форуме)), так и на ((com: англоязычном)). Также на //FreeNode// существует 4929 англоязычный IRC-канал **#laravel** == Лицензия == //Laravel// - некоммерческий проект с открытым исходным кодом, распространяющийся под лицензией ((http://www.opensource.org/licenses/mit-license.php MIT)).