ФорумПрограммированиеPHP для идиотов → Управление URL в Yii

Управление URL в Yii

  • Tekuto

    Сообщения: 1147 Репутация: N Группа: Адекваты

    Spritz 17 марта 2012 г. 21:47

    Изучаю Yii. Сейчас вот не могу разобраться с управление url.
    Создал через gii раздел Новости.

    Ссылка для просмотра новости имеет следующий формат:
    /news/view/id/1


    Необходимо, чтобы имела следующий:
    /news/slug


    Читаю туториалы. Использовать надо именнованные параметры для url.
    Задаю следующее правило:
    'news/<slug>'=>'news/view',

    В итоге не работает.

    Проверяю через id:
    'news/<id>'=>'news/view',

    Срабатывает нормально.

    В чем причина? Как понимаю, надо дополнительно указывать, что использую slug как именнованный параметр?
    Подскажите где.
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 17 марта 2012 г. 22:07, спустя 19 минут 13 секунд

    я думаю что все просто. во первых - скорее всего yii уже знает что такое <id> - (?<id>\d+), а что такое слуг, она наверное не знает.

    тебе надо видимо както определить формат этого слуга, либо юзать полные регулярки.
    второе - я не понима, почему в жанго все еще нет форматируемых по умолчанию таких подстановок… прямо удивлен.
    Сапожник без сапог
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 17 марта 2012 г. 22:12, спустя 5 минут 17 секунд

    'news/<slug>'=>'news/view',

    меняем на
    'news/<slug:\w+>'=>'news/view',
    Спустя 19 сек.
    http://yiiframework.ru/doc/guide/ru/topics.url
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 17 марта 2012 г. 22:20, спустя 8 минут 4 секунды

    ачуметь я был прав
    Сапожник без сапог
  • Tekuto

    Сообщения: 1147 Репутация: N Группа: Адекваты

    Spritz 17 марта 2012 г. 22:21, спустя 1 минуту

    я думаю что все просто. во первых - скорее всего yii уже знает что такое <id> - (?<id>\d+), а что такое слуг, она наверное не знает.

    Как я понял, не углубляясь в суть вопроса, кодогенератор автоматом подставляет $id, как параметр, и автоматом присваивает ему значением primary key.
    Чтобы не заморачиваться и не исправлять все, сделал так.

    Удалил id и сделал slug, как primary
    Пересоздал модель и crud.

    В итоге получил ссылку формата:
    news/view/id/slug


    Указал правило:
    'news/<id>'=>'news/view',


    В итоге все норм)))
    Спустя 43 сек.

    'news/<slug>'=>'news/view',

    меняем на
    'news/<slug:\w+>'=>'news/view',
    Спустя 19 сек.
    http://yiiframework.ru/doc/guide/ru/topics.url

    я и так делал тоже :D
  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 17 марта 2012 г. 22:22, спустя 1 минуту 20 секунд

    Tekuto, в итоге сделал через жопу, молодец) дуд, это ж хорошо, что фреймворк такой логичный
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 17 марта 2012 г. 22:24, спустя 1 минуту 14 секунд

    Troy, мне похуй :)
    Сапожник без сапог
  • Tekuto

    Сообщения: 1147 Репутация: N Группа: Адекваты

    Spritz 17 марта 2012 г. 22:33, спустя 9 минут 24 секунды

    Tekuto, в итоге сделал через жопу, молодец)

    Почему через жопу? Кодогенератор автоматом подставляет $id, как get-параметр. можно, конечно, ручками исправить.
    ачуметь я был прав

    догадка стоящая, но не то. именнованные параметры без регулярного выражения тоже допускаются.
    тогда параметр допускает любые символы, кроме слеша. (это в туториале было).
  • adw0rd

    Сообщения: 22959 Репутация: N Группа: в ухо

    Spritz 17 марта 2012 г. 22:45, спустя 12 минут 14 секунд

    второе - я не понима, почему в жанго все еще нет форматируемых по умолчанию таких подстановок… прямо удивлен.

    они так сильно нужны? )
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • phpdude

    Сообщения: 26646 Репутация: N Группа: в ухо

    Spritz 17 марта 2012 г. 22:49, спустя 3 минуты 41 секунду

    они так сильно нужны? )

    ну согласись с ними было бы проще, не?))
    Сапожник без сапог
  • Professor

    Сообщения: 2089 Репутация: N Группа: Адекваты

    Spritz 17 марта 2012 г. 23:24, спустя 35 минут 34 секунды


    Удалил id и сделал slug, как primary
    Пересоздал модель и crud.

    п*ц =)
    Там просто в контролере нужно переменную назвать $slug а не $id, и все. function actionNews($slug){}
  • Tekuto

    Сообщения: 1147 Репутация: N Группа: Адекваты

    Spritz 17 марта 2012 г. 23:34, спустя 9 минут 8 секунд

    п*ц =)
    Там просто в контролере нужно переменную назвать $slug а не $id, и все. function actionNews($slug){}

    А можно подробнее? Или ссылку для изучения?)
    Где эту переменную обозвать надо?
    Спустя 56 сек.
    function actionNews($slug){}

    ???
    Спустя 82 сек.
    Troy, кстати. У тебя ведь финле на yii?
    У тебя как реализовано?
  • mario

    Сообщения: 6067 Репутация: N Группа: Джедаи

    Spritz 18 марта 2012 г. 1:14, спустя 1 час 40 минут 9 секунд

    А можно подробнее? Или ссылку для изучения?)
    Где эту переменную обозвать надо?

    блять в экшене!!! Бля доку читать не учили? Кинул же ссылку туда… я в ахуе )))
    Спустя 78 сек.
    'news/<slug:\w+>'=>'news/view',

    newsController:
    viewAction($slug) {
    $slug = (string) $slug;//вот твой слуг
    }
    Спустя 43 сек.
    бля я пьян, так что наверное немного грубо, но пох, зато поймешь )
    Спустя 137 сек.
    'news/<slug:\w+>'=>'news/view',

    newsController:
    viewAction($slug) {
    $slug = (string) $slug;//вот твой слуг
    }


    вот тут про это прочти http://yiiframework.ru/doc/guide/ru/basics.controller в разделе "Привязка параметров действий"
  • Tekuto

    Сообщения: 1147 Репутация: N Группа: Адекваты

    Spritz 18 марта 2012 г. 4:11, спустя 2 часа 57 минут 25 секунд

    блять в экшене!!! Бля доку читать не учили? Кинул же ссылку туда… я в ахуе )))

    mario, не ругайся) читал я эти туториалы) все прочитал до того, как писать сюда)))
    По несколько раз прочитал. И этот самый, и про создание блога.

    знаю, что так, как ты написал, можно. и что можно вот так:

    viewAction($slug) {

    }


    Вся пизда от того, что я вьюхи не изменил))) И забыл про них напрочь)))
    ПиздеЦ!!! Убил дохуя времени из-за невнимательности!
    Спустя 153 сек.
    Нет, ну пиздец какой. столько времени убил на эту хуйню
  • Troy

    Сообщения: 2532 Репутация: N Группа: Джедаи

    Spritz 18 марта 2012 г. 9:21, спустя 5 часов 9 минут 42 секунды

    Tekuto, да на Yii, реализовано как в примере профессора и марио.

Пожалуйста, авторизуйтесь, чтобы написать комментарий!