Про роутинг

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Стало интересно кто и какой компонент использует. Я пока пытаюсь прикрутить, точнее прикрутил уже, Klein роутер, но с ним есть нюансы.

А именно искаропки он принимает параметром callback, который будет вызван при совпадении роута и адреса в браузере. Это однозначно нехорошо, так как вызывает баттхерт следующего плана:
1. метод долже быть или статичный, то есть все экшны контроллеров будут public static
2. Либо мы задаем изначально ему обьект контроллера и передаем метод, что конкретно не нравится тем, что создается куча мусора, для роутов которые не совпали.

PS: Может быть я что-то не так делаю? Кто-нибудь юзал сей продукт?
PPS: Я уже допилил его чуточку, чтобы он создавал нужный мне инстанс класса контроллера не из callback, а просто из названия.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
свой самописный over yii, он хранит правила в базе, позволяет генерить URL по объекту модели, задавать для любой сущности собственный отфонарный url и поддерживает вложенность сущностей

описанное у ТС как-то странно звучит
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Своих у меня было несколько, пока решил посмотреть как у цивилизованных людей сделано и напоролся на вот такие грабли, пока сижу думаю, то ли написать свое (еще мне не нравится встроенный view в klein), то ли продолжать жрать кактус.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Родной кохановкий. Пока не было случаев, что бы не хватило его. Он, кстати, вполне себе независим и довольно легко выдирается.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Флоп, а у коханы нету отдельных компонентов, как в той же симфони?
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Потому что в ней прекрасно работает автокомплит без описания тонны магии, потому что методов мало, принимают ожидаемые объекты, и они понятные, и делают очевидные вещи. :)
Предельно низкое связывание и крутое абстрагирование хорошо только в теории, как правило.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Предельно низкое связывание и крутое абстрагирование хорошо только в теории, как правило.
Ну не знаю, я щас втягивал компонент Security из Symfony 2, аутентификация со всякими доп. проверками и записью в базу обошлась мне в реализацию пяти интерфейсов, всё влезло в предусмотренные дырки для расширения. Вопрос о том, сколько я разбирался до реализации этих пяти интерфейсов, опустим как неконструктивный, бгыгыгы. Документация на компоненты хромает, как и phpdoc.

А Кохана --- это то самое гени(т)альное архитектурное решение с class User extends Core_User и угадайкой, какой User щас используется --- штатный или улучшенный?
 

Redjik

Джедай-мастер
Потому что в ней прекрасно работает автокомплит без описания тонны магии
Чето я не увидел в symfony2 тонны магии...
Даже поиском прошелся в свое время... удивился, но магия используется ТОЛЬКО в ОДНОМ классе... и то какой-то хелпер был.

В остальном, согласен.
 

флоппик

promotor fidei
Команда форума
Партнер клуба
Ну не знаю, я щас втягивал компонент Security из Symfony 2, аутентификация со всякими доп. проверками и записью в базу обошлась мне в реализацию пяти интерфейсов, всё влезло в предусмотренные дырки для расширения. Вопрос о том, сколько я разбирался до реализации этих пяти интерфейсов, опустим как неконструктивный, бгыгыгы. Документация на компоненты хромает, как и phpdoc.

А Кохана --- это то самое гени(т)альное архитектурное решение с class User extends Core_User и угадайкой, какой User щас используется --- штатный или улучшенный?
Я не говорю про сложность интеграции компонентов из симфони. Я говорил о том, что в самой Симфони, из-за ее «универстальности» и «компонентности» приходится писать в три раза больше кода.
Ну а class User extends Core_User пришел из времен когда не было неймспейсов. Печальная реальность пхп.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Я говорил о том, что в самой Симфони, из-за ее «универстальности» и «компонентности» приходится писать в три раза больше кода.
Я чрезвычайно сочувствую разработчикам Symfony, да. Ну а нам-то, простым пользователям, что с того?

Ну а class User extends Core_User пришел из времен когда не было неймспейсов. Печальная реальность пхп.
Причём здесь namespace'ы? Тут именно та проблема, что разработчики, чтобы не "писать в три раза больше кода" и не продумывать места для расширения разрешают влезать в кишочки framework'а, наследуя классы. При этом без магии оно не работает, по ходу из-за статических вызовов и наличия по всему коду явных "new Blah()".
 

keltanas

marty cats
В symfony вся квази "магия" как правило замечается теми, кто забросил изучение фреймворка на стадии написания контроллеров.
И разруливаются все эти страхи созданием в суперклассе контроллера хелперов вида:
PHP:
    /**
     * Shortcut to return the request service.
     *
     * @return Request
     */
    public function getRequest()
    {
        return $this->container->get('request');
    }
Т.е. хелпер в том или ином виде все равно пришлось бы создавать, чтобы достать экземпляр. В symfony всего-лишь надо делегировать контейнер, который вполне себе явно определяет зависимости.

За пределами контроллеров влияние этой "магии" вообще не замечается, ибо все компоненты красиво инжектятся друг в друга на уровне их создателя. И, как правило, о существовании контейнера вообще не подозревают. Так же, например, как мы не подозреваем, откуда берутся звезды, планеты и черные дыры.

Так что если бы ТС взял бы роутер из symfony, то ничего бы не потерял. Компоненты symfony и fullstack framework - это разные вещи, даже если есть страх перед контейнером ))
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Прикрутил компонент от симфони, сижу жую его, Klein выкинул из-за дикой кособочности, подумываю уже сожрать много-кактусов-как-в-мексике и (пере)писать таки свой роутер =(

PS: Что мне ужасно не нравилось в кохане, так это Имена_Классов, не люблю подчеркивания, люблю чтобы БылоТак. Имхо)
 

keltanas

marty cats
Тут как раз рассказывается, как с помощью HttpKernel разруливается использование методов классов в качестве экшенов. Проблема, которая возникла с Klein, как я понял.
Правда для этого надо использовать так же и компонент Request, либо его адаптер ))
Но, надо сказать, что это того стоит ))

На крайняк можно использовать экшены вида:
PHP:
function callAction($controllerClass, $actionMethod) {
    return function() use ($controllerClass, $actionMethod) {
        $controller = new $controllerClass();
        return $controller->$actionMethod();
    };
}

$routes->add('test', new Routing\Route('/test', array(
    '_controller' => callAction('SomeController', 'indexAction'),
)));
=)))
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
keltanas
я подобное сам допилил, просто переписав немножко ядро клейна. Еще меня дико выбесило то, что после недавнего git pull перестали нормально обрабатываться 404 на этом движке. Ну и просто супер - вернуть на 404 роуте в качестве ответа код 200, это значит мы просто будем плодить дубли для поисковиков. Это, блин, за гранью добра и зла.
 

keltanas

marty cats
Сам сейчас покопался в роутере Symfony. Оказалась очень удобная и гибкая вещь. Возвращает параметры найденного роута в массиве и дальше уже сам делаешь с ними, что тебе нужно и как нужно.
Словом, как всегда, компонент не делает ничего лишнего, а только то, что необходимо и достаточно.
 
Сверху