А что насчет нормального ЧПУ? (есть проблемы)

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: А что насчет нормального ЧПУ?

Сообщение ElisDN »

Ответил в комментарии снова. Как раз одно правило на весь сайт.
Tommi
Сообщения: 90
Зарегистрирован: 2013.08.01, 13:44

Re: А что насчет нормального ЧПУ?

Сообщение Tommi »

yan писал(а):выше уже дали ссылку http://alu5.sgxi1v6hzn3zo6e.qjtv.e/doc/ ... .url#sec-9 - делаем свое правило и как угодно разруливаем
Капитан, я про то и спрашивал - как бы с помощью своего правила это и можно было бы сделать.
"Как угодно" разрулить с помощью своего волшебного правила не получается. Если бы ты попробовал прочитать и подумать хоть чуть чуть о чем я выше писал, то не нес бы глупости, уверовавший(а не разобравшийся в сути данного механизма) что свое правило спасет от всех бед.
Tommi
Сообщения: 90
Зарегистрирован: 2013.08.01, 13:44

Re: А что насчет нормального ЧПУ?

Сообщение Tommi »

ElisDN писал(а):Ответил в комментарии снова. Как раз одно правило на весь сайт.
Я говорю о том, что не могу узнать и сопоставить название параметра, а вы мне советуете его переименовать....
Давайте я стану самым ГЛАВНЫМ и дам всем указание , про то какие имена и в каком порядке использовать. И проблема будет решена.
Итак ВСЕМ, ВСЕМ, ВСЕМ, в аргументах action действий, можно использовать только имена параметров - $one, $two, $three,... Все расширения, все модули, все что кидается на package.org, все должны подчиняться этому правилу. :mrgreen:
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: А что насчет нормального ЧПУ?

Сообщение ElisDN »

Tommi писал(а):Я говорю о том, что не могу узнать и сопоставить название параметра...
Итак ВСЕМ, ВСЕМ, ВСЕМ, в аргументах action действий, можно использовать только имена параметров - $one, $two, $three,...
Ответил вам про рефлексию и сериализацию http://www.elisdn.ru/blog/48/routing-in ... urlmanager
Tommi
Сообщения: 90
Зарегистрирован: 2013.08.01, 13:44

Re: А что насчет нормального ЧПУ?

Сообщение Tommi »

Я уже видел. Но это не решение, там я ответил почему.
Tommi
Сообщения: 90
Зарегистрирован: 2013.08.01, 13:44

Re: А что насчет нормального ЧПУ?

Сообщение Tommi »

Хорошо что хоть один человек все таки понял в чем проблема.

Продублирую user-case, чтобы предупредить других, что есть такая проблема. А то мужики то и не знают.

Тут все из-за того что роут состоит только из [модуля/]контроллера/действия.
Странно, что никто этого раньше не замечал.
Все наверное наивно надеялись на магию иероглифического письма для настройки UrlManager. А магия там не особо помогающая.
Даже вон по примеру из блога ElisDN про создание своего правила PageUrlRule очевидна эта проблема:
Если такое управление адресом ОТ КОРНЯ будет требоваться для разных роутов то придется создавать свои правила типа - PageUrlRule - NewsUrlRule , UsersUrlRule и т.д.
И если эти УРЛ правила будут искать , как у вас сделано, каждый в своей таблице, то не факт же что первое правило найдет соответствие. Станет работать второе, третье...
А это все множество излишних запросов к базе. Что непозволительно.
Выход один - одна таблица для синонимов для всего сайта.
Распарсить запрос становиться легко и просто - всего один запрос к базе.
А для создания ссылок уже и приходим к моей проблеме.
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: А что насчет нормального ЧПУ?

Сообщение vova07 »

Я думаю чтоб все было по честному, вам нужно опубликовать здесь ваши мысли касательно решения данной проблемы. Не нужно приводить демо коды и все такое, просто опишите логику которая позволило бы сделать роутинги идельными.

На текущий момент как решение данной проблемы, с учетом того что есть, может быть кэширование выборки роутов, или дополнительная переменная и её кэширование в своём классе с правилами маршутизации.

Описание логики:
- Для всех роутов используется одна таблица. В ней есть ЧПУ путь, и програмный путь. (Дополнительные поля по желанию.)
- В момент парса роута, делается один запрос в базу, как вы выше заметили. (Тут проблем нет.)
- Создания роута заключается примерно в следующем:
а) В нашей моедли которая управляет таблицей роутов, создается статический метод, который выбирает все записи и кешируют их если кэш пустой. (Кэш нужно всегда сбрасывать в момент обновления\создания нового роута)
б) В момент создания роута используется кэш модели что мы реализовали выше, что позволит избавится от лишних запросов вообще, если есть кэш, или обойтись одним запросом когда мы его впервые заполняем.
в) Если не хочется привязыватся к методу модели, можно в своём классе маршрутизации добавить приватный атрибут, и в момент вызова первой функции создания урла, заполнять атрибут доступными правилами, таким образом сократить количество запросов к БД до 1 в случае отказа от кэша.
Tommi
Сообщения: 90
Зарегистрирован: 2013.08.01, 13:44

Re: А что насчет нормального ЧПУ?

Сообщение Tommi »

vova07 писал(а):Я думаю чтоб все было по честному, вам нужно опубликовать здесь ваши мысли касательно решения данной проблемы. Не нужно приводить демо коды и все такое, просто опишите логику которая позволило бы сделать роутинги идельными.
Нет проблем. Хочу тоже чтобы все было по честному.
Примерный план действий.
1) Отменить понятие Контроллер по умолчанию
2) Отменить понятие Действие по умолчанию
2.5) Для Главной страницы (это когда роут в пути пустой), роут берется из Конфига
3) Ввести понятие Параметры
4) Роут становится такой:
?r=модуль/путь_к_контроллеру/действие/параметр1/параметр2/...
5) Действие будет объявляться так:

Код: Выделить всё

public function actionView($arg1, $arg2 = 'default', $page = 0)
{
// $arg1 == параметр1
}
6) РАЗБОР входящего запроса фреймворк:
- будет знать абсолютно ТОЧНО(!!!!!!) где начинаются параметры и выпарсит их в массив $ARG = [1 => параметр1, 2 => параметр2,... ]
- при биндинге данных в параметры действия:
- те, параметры, которые именуются по шаблону '/arg\d/' ядро фреймворка наполнит из массива $ARG.
- для остальных, как и сейчас , из $_GET
- значения по умолчанию без изменений
- дальше без изменений
7) Создание URL:

Код: Выделить всё

/*
Контроллер - museums
Действие - view
*/
$this->createUrl('museums/view/1/best');
$this->createUrl('museums/view/1/all', ['page' => 1] );
При этом уже в начале выполнения скрипта, я буду знать что у нас за Текущая страница
( при нечистых ссылках из ($_GET['r'] == 'museums/view/1/best')
И смогу вообще по всему сайту оперировать с понятием Страница сайта.
Виджет показать только на определенной странице сайта? На 'museums/view/1/best'? Да, пожалуйста, вот мы на ней.
Последний раз редактировалось Tommi 2013.12.13, 08:54, всего редактировалось 1 раз.
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: А что насчет нормального ЧПУ? (есть проблемы)

Сообщение vova07 »

Если честно не могу понять чем отличается логика описаная выше, от того что есть сейчас. То что вы описали в пунтке 3, 4, и 5 уже есть в фрейме, и именно так и работает. (Кроме как то что вид параметров нужно через роуты прописывать чтобы получить такой вид).

Разбор и создание ссылок, вроде без проблем можно реализовать на том что есть.
Касательно понятия, страница сайта, это тоже реализуемо, не могу понять в чем проблема. А вывод виджета, на определенной странице, дело техники.

Я сегодня как раз начал делать так называемый модуль "структуры сайта", для одного маленького проекта на Yii 2. Хочу заметить что за счёт одной таблицы с ЧПУ ссылками, своего класса роутов и одного запроса в базу, можно спарсить, и создать все ссылки для запрашиваемой странице. Это один запрос который в случае необходимости можно и закэшировать, но который позволяет реализовать все то что вам нужно. Или я что-то не понимаю в данной ситуации?
Аватара пользователя
S c
Сообщения: 883
Зарегистрирован: 2012.04.11, 14:46

Re: А что насчет нормального ЧПУ? (есть проблемы)

Сообщение S c »

создается впечатление, что уважаемый Tommi просто не разобрался еще в yii
Аватара пользователя
mihail_dev
Сообщения: 243
Зарегистрирован: 2013.07.17, 00:51
Откуда: Молдова
Контактная информация:

Re: А что насчет нормального ЧПУ? (есть проблемы)

Сообщение mihail_dev »

Tommi,
а из этой записи $this->createUrl('museums/view/1/all', ['page' => 1] ); разве как то известно к какому контроллеру/действию будет обрашение и с какими параметрами
просто если работает 1 разработчик то конечно возможно он это и поймёт но если несколько то другой разраб просто к гадалке должен будет ходить вам не кажется?
Изображение
Tommi
Сообщения: 90
Зарегистрирован: 2013.08.01, 13:44

Re: А что насчет нормального ЧПУ? (есть проблемы)

Сообщение Tommi »

mihail_dev, если пункты 1 и 2 моего плана будут учтены, то по началу роута будет точно известно где обрабатывается запрос. Да и то, в реальности параметры то цифры в основном, так что не вижу проблемы по сравнению с существующим.

Да ладно, все равно все это безнадежно...
Из системы спроектированной запускаться с ручника, не слепить автоматизированную CMS.
И это только одна нестыковка, есть и другие, смысла о них тут говорить думаю тоже нет.
Теперь мне хоть понятна причина почему на yii1 не было создано ни одной стоящей CMS. Ручники не позволят создать систему, адекватную к современным требованиям пользователя такой цмс.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: А что насчет нормального ЧПУ? (есть проблемы)

Сообщение samdark »

Вообще много CMS было создано. Просто чтобы достичь популярности того же Drupal нужно очень много времени. А так чем, например, http://buildwithcraft.com плох?
Аватара пользователя
flashimage
Сообщения: 1517
Зарегистрирован: 2011.01.23, 12:43

Re: А что насчет нормального ЧПУ? (есть проблемы)

Сообщение flashimage »

Tommi писал(а):Да ладно, все равно все это безнадежно...
Из системы спроектированной запускаться с ручника, не слепить автоматизированную CMS.
Да, прям беда...))
Готовых решений море, поклонитесь гуглу и получите озарение
http://www.yiiframework.com/extension/dburlmanager/
Бранчи это гомеоморфические эндофункторы, которые мапятся на субманифолды пространства Гилберта.
Аватара пользователя
mihail_dev
Сообщения: 243
Зарегистрирован: 2013.07.17, 00:51
Откуда: Молдова
Контактная информация:

Re: А что насчет нормального ЧПУ? (есть проблемы)

Сообщение mihail_dev »

Tommi писал(а): Теперь мне хоть понятна причина почему на yii1 не было создано ни одной стоящей CMS. Ручники не позволят создать систему, адекватную к современным требованиям пользователя такой цмс.
Потому что yii подразумевает чёткое приложение а не универсальный проект. Хотя есть возможность написать цмс (сам писал понял что не стоит, легче работать с частями проекта каждый раз собирая приложение), но если надо чем не устраивает http://yupe.ru/
Изображение
Ответить