These are chat archives for PHPixie/Hotline

18th
Nov 2015
Vadim Meling
@Linfuby
Nov 18 2015 04:21

@dracony Доброе утро. Я наверное не в ту степь уже полез, и в итоге заблудился.
Как построить ссылку зная только имя процессора (processor) и действие (action).
Насколько известно, главная страница строится с указанием имени процессора и действия
Чтобы ссылка на главную строилась без добавления чего-либо нужно добавлять pattern в routeResolver

return array(
    'type'      => 'group',
    'resolvers' => array(
        'home' => array(
            'type'     => 'pattern',
            'path'     => '',
            'defaults' => array(
                'processor' => 'home',
                'action'    => 'default',
            ),
        ),
        'default' => array(
            'type'     => 'pattern',
            'path'     => '(<processor>(/<action>))',
            'defaults' => array(
                'processor' => 'home',
                'action'    => 'default',
            ),
        ),
    ),
);

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

Roman Tsiupa
@dracony
Nov 18 2015 11:17
tut
@Linfuby не понял)
можно поподробней?
как вам ктати рождественско новогодняя фея ) ?
Vadim Meling
@Linfuby
Nov 18 2015 11:51
Мне кажется или это одна и та же, только в разных костюмах? :)
Roman Tsiupa
@dracony
Nov 18 2015 11:58
ugu))
fantaziji ne hvatilo =(
tak chto tam s menju?
Vadim Meling
@Linfuby
Nov 18 2015 12:01

Вот смотри, на счет URL.
Хочу я создавать меню в админке. Для того чтобы указать ссылку на определенную страницу, нужно чтобы эти страницы были доступны для выбора (А не ручной ввод).
И вот я выбираю например что меню будет ссылаться на статью и указываю конкретную статью.
Получается, мне известно имя процессора (articles) и action (default, если не выбрал никакой статьи и article если статья выбрана).
Теперь надо сформировать ссылку на эту статью. Я не могу взять и указать domain.com/articles/article/1 так как за обработку этой ссылки отвечает роутер с именем app:blog и ссылки должны строиться так: domain.com/blog/categoryArticle/aliasArticle
То есть мне нужно еще где-то прописывать resolvePath, чтобы я смог спокойно написать:

$this->httpUri('app:blog', array('processor' => 'articles', 'action' => 'article', 'id' => 1));

Поэтому мне хочется сделать так, чтобы по имени процессора и action найти самый подходящий роут и исходя из path сформировать корректную ссылку
Как-то не так мне кажется я объясняю.

Начну с практических примеров:
Есть функция \PHPixie\Route\Translator::match($serverRequest = null)
Она как раз и делат то что мне нужно, за исключением, что данные формируются исходя из текущей страницы, а не страницы, которую я хочу
Kostya
@KokaUA
Nov 18 2015 12:22
Не проще сделать свою функцию redirect которая по умолчанию будит выбирать бандл?
Vadim Meling
@Linfuby
Nov 18 2015 12:31

Проще всего всё привести к статическому шаблону, и тогда писать прямые ссылки без поиска как они формируются

<a href="/">Главная</a>
<a href="/articles/article/1">Статья 1</a>

А задача как раз стандартизировать

$processor = 'home'
$action = 'default'
$id = null;
echo $this->url($processor, $action, $id);
// Тут должно вернуться: www.domain.com/
$processor = 'articles'
$action = 'article'
$id = 1;
echo $this->url($processor, $action, $id);
// Тут должно вернуться: www.domain.com/articles/article/1

А сейчас для главной возвращается www.domain.com/home/default, так как всем ссылкам $resolvePath указан "app.default"
Получается для каждого меню надо еще хранить где-то значение $resolvePath, это конечно не проблема, но мне кажется это не совсем правильным.

Vadim Meling
@Linfuby
Nov 18 2015 12:36
В Пикси Роутер по ссылке пытается найти имя процессора и action - и первый попавшийся паттерн, который подходит под условия resolvers > path возвращает значения процессора и action по умолчанию заменяя при необходимости из ссылки. А надо наоборот, не указывая конкретный $resolvePath, чтобы проходил по всем паттернам (Сейчас просто выдается исключение "Route path is empty", если не указали по правилам какого паттерна формировать URL)
Kostya
@KokaUA
Nov 18 2015 12:49
Ну думаю тут свой хелпер писать нужно будит.
А вообще самому то что первый паттерн возвращается не особо нравится, поэтому склоняюсь процессор указывать жестко в pattern а его значение дефолтное брать.
Vadim Meling
@Linfuby
Nov 18 2015 12:53
А так и приходится, если путь отличается от стандартного processor/action/id
У меня на сегодня прописано уже 16 шт.
Roman Tsiupa
@dracony
Nov 18 2015 13:37
@Linfuby так а если тебе извстен процессор и екшн, почему там же не запоминать и имя роута?
Kostya
@KokaUA
Nov 18 2015 13:37
@Linfuby Если честно я все больше сколняюсь выбросить processor/action роуты, и для каждого делать более четкие маршруты
Roman Tsiupa
@dracony
Nov 18 2015 13:38
фактически в твоем строителе меню надо еще имя роута запомнить и все ок будет
идти по всем роутам и пробовать собрать назад урл не сильно хорошая идея
ссылок на странице много быть может
а там есть что парсить
куча процессора уйдет
Kostya
@KokaUA
Nov 18 2015 13:45
@dracony Кстати вот еще один момент с роутами. К примеру есть несколько бандлов с одинаковыми патернами, по сути выбирается первый и остальные игнорируются.
Ты не думал сделать что если нету соответствующего процессора, что-бы искало дальше в следующем бандле?
Roman Tsiupa
@dracony
Nov 18 2015 13:47
ну это как смонтиовать
созадешь групу в нее монтируешь 2 бандла
и все
без префикса
вот бандл апп без префикса монтируеться
можно все так смонтировать
Kostya
@KokaUA
Nov 18 2015 13:57
Ну хз у меня второй бандл без префикся вообще отказывается искать, только первый
Roman Tsiupa
@dracony
Nov 18 2015 14:00
покажы конфиги
щас посмотрим
Linker
@jqfile
Nov 18 2015 14:00
та ж фигня , без префикса не работает коректно
Roman Tsiupa
@dracony
Nov 18 2015 14:00
хм
Linker
@jqfile
Nov 18 2015 14:00
но в принципе с префиксом даже лучше
Roman Tsiupa
@dracony
Nov 18 2015 14:00
ну скинь конфиг попробую)
Kostya
@KokaUA
Nov 18 2015 14:09
Щас скинуть не могу, просто скопируй app как app2 и попробуй достучатся к нему, создай там greet2 к примеру. Только app2 вторым подключи в http
Главное что-бы в самых бандлах pattern совпадал (процессор)(/экшин)
Roman Tsiupa
@dracony
Nov 18 2015 14:17
щас попробую)
допишу статью на хабр)
перевел последний пост с блога просто)
Kostya
@KokaUA
Nov 18 2015 15:25
Несколько дней назад я переключил свой сервер с с порядка 30-ти сайтами на PHP 7.
Две буквы с
Kostya
@KokaUA
Nov 18 2015 15:30
 во многих случаях оно и так так работало
так так повторяется
Roman Tsiupa
@dracony
Nov 18 2015 15:32
ggg
Kostya
@KokaUA
Nov 18 2015 15:32
?
Roman Tsiupa
@dracony
Nov 18 2015 15:33
первое поправил
а второе я так и задумал
типа "и так" "так работало"
но до лучше убрать одно
спасибо =)
Kostya
@KokaUA
Nov 18 2015 15:34
Кешированая страница наверное, у меня пока не обновилось
А на английском у тебя тоже оно написано? Как бы foreach он кажется)
Все поправилось
Roman Tsiupa
@dracony
Nov 18 2015 15:49
=)
roman4e
@roman4e
Nov 18 2015 16:16
ehlo wrldo
Roman Tsiupa
@dracony
Nov 18 2015 16:17
=)
привет)
Kostya
@KokaUA
Nov 18 2015 16:29
Посмотрел на сообщение и вспомнил прикол о том как написать hello world на с++, там при компиляции было около 30 ошибок :)
Roman Tsiupa
@dracony
Nov 18 2015 16:36
))
Roman Tsiupa
@dracony
Nov 18 2015 16:38
)))))
Kostya
@KokaUA
Nov 18 2015 17:00
Что-то в этом роде, там где смотрел еще был отчет о сборке).
Roman Tsiupa
@dracony
Nov 18 2015 17:00
))))
)))
)))
Kostya
@KokaUA
Nov 18 2015 17:29
ту_ту() хехехе
Roman Tsiupa
@dracony
Nov 18 2015 17:34
фишка в объектах))
стул бутылка веревка и мыло)))
Kostya
@KokaUA
Nov 18 2015 17:48
Только чутка очередность попутали, бутылка первая)
Roman Tsiupa
@dracony
Nov 18 2015 18:01
))))
Kostya
@KokaUA
Nov 18 2015 18:23
С бандлами не проверял роуты?
Roman Tsiupa
@dracony
Nov 18 2015 20:59
еще нет, но проверю =)