Silicone Skeleton — настроенный Silex


    Если вы не один раз начинали новые проекты с использованием Silex, то вы знаете что каждый раз в начале нужно настроить его под себя: добавить провайдеры, переопределить некоторые сервисы, определить структуру каталогов, и т.д. Со временем у вас появляется базовый набор для Silex которые вы используете для создания нового проекта.
    Но если у вас его нету, предлагаю вам ознакомиться с моим: Silicone Skeleton.

    В Silicone Skeleton включены следующие компоненты:
    • HttpCache — работает только в prod окружении.
    • Class Controllers — вы можете размещать код контроллеров не только в функциях, но и в методах классов.
    • Doctrine Common — вынесен отдельно т.к. используется в нескольких не зависимых провайдерах.
    • Doctrine ORM — вы можете пользоваться полноценной ORM (а не только DBAL). Для работы были добавлены следующие команды:
      1. database:create
      2. database:drop
      3. schema:create
      4. schema:update
      5. schema:drop

    • Monolog — логи пишутся в app/open/log/log.txt
    • Session
    • Twig — шаблоны лежат в app/view/
    • Translation — языковые файлы(yml, xliff) лежат в app/lang/[domain].[locale].yml
    • Validators — добавлен недостающий валидатор UniqueEntityValidator для Doctrine Orm
    • Forms
    • Security — с регистрация и авторизацией пользователей
    • Annotation Routes — можно использовать аннотации для роутов и ORM.
    • Console — необходимые команды для ORM и очистки кэша.


    Структура каталогов очень близка с Symfony
    app/
        config/  -- Настройки
        lang/    -- Языковые файлы
        open/    -- Кэш, логи
        src/     -- Исходники
        vendor/  -- Вендоры
        view/    -- Шаблоны
        console  -- Консоль
    web/
        index.php
    


    Вы можете использовать обычные Silex контроллеры: $app->get(...) вместе с такими контроллерами:
    class Blog extends Controller
    {
        /**
         * @Route("/blog/{post}")
         */
        public function post($post)
        {
            return $this->render('post.twig');
        }
    }
    


    Так же в Silicone Skeleton полностью настроен Security Provider. И контроллер входа и регистрации.

    Для установки используйте Composer:
    composer create-project elfet/silicone-skeleton your/app/path
    


    Все желающие помочь с развитием приветствуются!
    Поделиться публикацией

    Комментарии 11

      +1
      Есть же Silex Kitchen.
        +3
        Да есть, но там нету Doctrine ORM и регистрации с авторизацией. И чего плохого в том что бы иметь ещё одну сборку Silex?
          +3
          Пока сборок не очень много — плохого онечно же ничего :)
            0
            http://habrahabr.ru/post/268189/ Silex skeleton + Gulp + LiveReload — моя сборочка.
          0
          А чем отличается от Symfony? :)
            –1
            Тем, что все же это Silex. А Symfony это не только структура каталогов.
              0
              Я не столько про структуру каталогов, сколько про функциональность. Понятно, что архитектура другая (немного), но функциональность навскидку очень сильно пересекается.
                +4
                Symfony2 — это набор компонентов + «оговоренная» архитектура.
                У вас почти все компоненты Symfony2 + «оговоренная» архитектура…
              +2
              Очень уж доктрина громоздкая, я вместо нее Propel использую, на много минималистичнее и родной провайдер для сайлекса есть.
                0
                2 propel еще не стабильный, а xml-конфиги мне лично совсем не нравятся. Хотелось бы что-то между redbean и doctrine.
                0
                Если используете doctrine orm, почему бы не создать провайдер для кеша?)
                Вот так я для себя сделал
                public function register(Application $app)
                {
                    $app['cache.driver'] = 'array';
                    $app['cache.dir'] = null;
                    $app['cache.extension'] = null;
                    $app['cache.namespace'] = null;
                
                    $app['cache'] = $app->share(function () use ($app) {
                        $name = $app['cache.driver'];
                        if ($name instanceof CacheProvider) {
                            $driver = $name;
                        } else {
                            $className = 'Doctrine\Common\Cache\\' . ucfirst($name) . 'Cache';
                            if (!class_exists($className)) {
                                throw new \InvalidArgumentException("Doctrine cache provider \"$name\" not exist");
                            }
                            if (stripos($name, 'file') !== false) {
                                $driver = new $className($app['cache.dir'], $app['cache.extension']);
                            } else {
                                $driver = new $className();
                            }
                        }
                        if ($app['cache.namespace'] !== null) {
                            $driver->setNamespace($app['cache.namespace']);
                        }
                
                        return $driver;
                    });
                }
                

                Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                Самое читаемое