ФорумПрограммированиеPHP для идиотов → генерация URL's

генерация URL's

  • Абырвалг

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

    Spritz Ноя. 29, 2009, 1:50 д.п., спустя 15 минут 41 секунду

    Доброго вечера.

    Сам не знаю, чего хочу. Заделитесь классом для генерации ссылок. Я не могу придумать, что в нем нужно. Причем мне генерировать ссылки нужно и на стороне клиента и на сервере.

    Ну что-то типа…
    <?
    $ed = $this->li->setAction('edit');
    $del = clone $this->li;
    $del->setAction('delete');
    foreach ($this->rows as &$row) {
    $row['url_edit'] = $ed->setParams('id', $row['id'])->get();
    $row['url_delete'] = $del->setParams('id', $row['id'])->get();
    }


    Хотя я не уверен, что это удобно.

    Бля, ну вот к примеру я подставляю через шаблонизатор <form action="[:actionUrl:]">
    я не знаю, есть ли в этом action "?". Соответственно когда буду менять че-то, добавлять-удалять параметры, я должен искать "?", нашел - добаввлять &param=foo.
  • Абырвалг

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

    Spritz Ноя. 29, 2009, 1:35 д.п., спустя 23 часа 44 минуты 19 секунд

    и может какие-то идеи оберток над request
  • phpdude

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

    Spritz Ноя. 29, 2009, 2:03 д.п., спустя 28 минут 9 секунд

    а нахуй?)
    Сапожник без сапог
  • Абырвалг

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

    Spritz Ноя. 29, 2009, 12:02 п.п., спустя 9 часов 58 минут 49 секунд

    да хер его знает. Для удобства. Для абстракции.

    Вот смотри: я генерирую какую-то страницу. Если ЧПУ включен, то у этой страницы может быть url вида "/my/some/page", если отключен, то начерно что-то типа "?m=content&id=18". На этой странице мне нужно нарисовать форму, и добавить пару-тройку параметров. Ну типа do=save, id=30. Как быть? смотреть включен и ЧПУ или нет, какая ссылка сейчас, есть ли в этой ссылке вопросительный знак или нет. А если там уже записан параметр do=add? нужно его переписать.

    Короче это все можно делать руками, а можно через класс.


    другой пример:
    $this->do = (isset($_GET['do'])) ? $_GET['do'] : 'add';
    $this->id = isset($_GET['id']) ? $_GET['id'] : 0;

    и такую хрень я б переписал на
    $this->do = Request::get('do', 'add');
    $this->id = Request::get('id', NULL);

    хотя это лишний вызов функций и все такое

  • Абырвалг

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

    Spritz Ноя. 29, 2009, 12:32 п.п., спустя 30 минут 28 секунд


    и может какие-то идеи оберток над request


    В поисках обертки… Старый Мавр детектед
    http://www.phpclasses.org/browse/package/3403.html
  • Trej Gun

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

    Spritz Ноя. 30, 2009, 1:23 д.п., спустя 12 часов 51 минуту 14 секунд

    Абырвалг, да это я  
    Спустя 7 сек.
    http://mabp.kiev.ua/2008/04/20/request/ свежая версия
  • Абырвалг

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

    Spritz Дек. 15, 2009, 10:32 д.п., спустя 15 дней 9 часов 8 минут

    я вот думаю: как бы на основе роутеров генерировать URL'ы?

    'files/edit/:num' => array('m' => 'files.manager', 'params' => array('id')),

    <?
    $li->add('m', 'files.manager')
    ->addParam('id', $this->id)
    ->generate();

    осуществляет поиск по роутерам, если нашло че-то и nice_url's включены - генерирует красивую ссылку. В противном случае - ?m=files.manager&id=$this->id
  • phpdude

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

    Spritz Дек. 15, 2009, 10:35 д.п., спустя 2 минуты 26 секунд

    Абырвалг, я склоняюсь к тому, чтобы ВСЕГДА БЫЛИ НАЙС ЮРЛ и нельзя было их выключить. mod_rewrite в наше время уже не роскошь :)
    Сапожник без сапог
  • Абырвалг

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

    Spritz Дек. 15, 2009, 10:43 д.п., спустя 8 минут 21 секунду

    вообще да, возможно так и нужно. Зачем делать лишнюю работу, придумывать этот генератор? Да и это будет лишний вызов: одно дело я пишу /files/edit/$this->id и то, что в прошлом сообщении написано.

    НО: если вдруг так получилось, что mod_rewrite нет, можно ко всем URL'ам добавить index.php: index.php/files/edit/$this->id. Так что это как-то тоже нужно отслеживать.
  • phpdude

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

    Spritz Дек. 15, 2009, 11:21 д.п., спустя 38 минут 1 секунду

    НО: если вдруг так получилось, что mod_rewrite нет
    я бы просто посочувствовал клиенту и сказал послать их хостера на длинный хуй.
    Сапожник без сапог
  • eudj1n

    Сообщения: 11 Репутация: N Группа: Кто попало

    Spritz Дек. 15, 2009, 2:32 п.п., спустя 3 часа 10 минут 24 секунды


    вообще да, возможно так и нужно. Зачем делать лишнюю работу, придумывать этот генератор? Да и это будет лишний вызов: одно дело я пишу /files/edit/$this->id и то, что в прошлом сообщении написано.

    НО: если вдруг так получилось, что mod_rewrite нет, можно ко всем URL'ам добавить index.php: index.php/files/edit/$this->id. Так что это как-то тоже нужно отслеживать.


    Если юзаете шаред хостинг, то в 99% будет апач с мод_реврайтов.
    Если там не апач, а nginx или lighttpd, то тоже проблем не будет, роутинг достаточно легко настраивается.

    В иных случаях советую задуматься о смене/выборе хостинга, который Вас устроит :)
  • Абырвалг

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

    Spritz Июнь 6, 2010, 12:42 п.п., спустя 172 дня 21 час 10 минут

    не все так славно в BL. Ниже представлен кусок файла с настройками роутера

    <?php

    return array(
    // …

    // редактирование данных по периоду
    'registry/:num/:num/edit' => array('m' => 'registry.period', 'do' => 'edit', 'params' => array('childId', 'periodId')),
    // просмотр периода
    'registry/:num/:num' => array('m' => 'registry.period', 'params' => array('childId', 'periodId')),
    // редактирование ребенка
    'registry/:num/edit' => array('m' => 'registry.manager', 'do' => 'edit', 'params' => array('childId')),
    // список возрастных разделов
    'registry/:num' => array('m' => 'registry.child', 'params' => array('childId')),
    // добавление ребенка
    'registry/add' => array('m' => 'registry.manager', 'do' => 'add'),
    // список детей
    'registry' => array('m' => 'registry.manager'),
    );


    что плохо - везде дублируется registry. Это было бы корректно сделать в виде префикса. Кроме того обратного действия нету: я генерю ссылки руками. Я не понимаю, как бы это сделать (префиксы/суброутинг и обратная генерация ссылки), помогите
    Спустя 223 сек.
    в sf2 есть префиксы… Ну я вот уже писал про суброутинг, но не шарю как его организовать
  • phpdude

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

    Spritz Июнь 6, 2010, 12:50 п.п., спустя 8 минут 18 секунд

    Абырвалг, да лол ты хули :D
    Спустя 9 сек.
    страдаешь хуетой
    Сапожник без сапог
  • Абырвалг

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

    Spritz Июнь 6, 2010, 12:52 п.п., спустя 1 минуту 49 секунд

    нипонял. Ну вот как у тебя роутинг организован?
  • phpdude

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

    Spritz Июнь 6, 2010, 12:54 п.п., спустя 2 минуты 13 секунд


    нипонял. Ну вот как у тебя роутинг организован?
    никак :)

    в простом варианте - модуль/action/params
    Сапожник без сапог

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