ФорумПрограммированиеPHP для идиотов → Оптимизация роутера запросов

Оптимизация роутера запросов

  • Troy

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

    Spritz 4 марта 2010 г. 14:11, спустя 38 минут 1 секунду

    У меня так

    <?php
    class news extends Action {
       
       function _load () {
           
           $this->SetDefaultEvent('all');
           $this->AddEventPreg('(.*)', 'full');  
           
       }
       
       function all () {
           // Тут код вывода всех новостей
       }

       function full () {
           // Вывод полной новости
       }

    }

    Когда url будет site.ru/news , выполнится $news->all(); , когда урл будет site.ru/news/15 выполнится $news->full();
  • kostyl

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

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

    Spritz 5 марта 2010 г. 8:47, спустя 17 часов 48 минут 26 секунд

    я так понимаю у вас обоих схему URL поменять нельзя. есть некое правило 'controller/action/mazafaka' и никак иначе ?
    Спустя 181 сек.
    а если я для новостех захочу сделать не "news/add.html", а "add/news.html" или "добавить-новость.html" ? придется править код класса-контроллера, а также всех шаблонов где упоминается ссылка на это действие
    ιιlllιlllι унц-унц
  • kostyl

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

    Spritz 5 марта 2010 г. 11:46, спустя 2 часа 59 минут 50 секунд

    artoodetoo
    возможно, но Request должен определять из какой части урла брать данные, и передает эти данные диспетчеру. типа того эм..
  • Troy

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

    Spritz 5 марта 2010 г. 12:43, спустя 56 минут 49 секунд

    artoodetoo,

    <?php
    class news extends Action {

    function _load () {

    $this->SetDefaultEvent('all');
    $this->AddEventPreg('(.*)\.html', 'full');
    $this->AddEvent('add.html', 'add');

    }

    function all () {
    // Тут код вывода всех новостей
    }

    function full () {
    // Вывод полной новости
    }

    function add () {
    }

    }


    Теперь все новости site.ru/news/ , полная новость site.ru/news/13.html и добавление site.ru/news/add.html
  • rider-sx

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

    Spritz 5 марта 2010 г. 13:26, спустя 42 минуты 19 секунд

    class Router
    {
       static public $Action, $Params;
       private $tmp = array();
       
       function __construct ($uri) {
           $this->tmp['uri'] = $uri;
           $this->parseUri();
           $this->loadController();
           unset($this->tmp);
       }
       
       public function parseUri () {
           $this->tmp['url_parts'] = explode('/', substr($this->tmp['uri'], 1));
           $this->Action = $this->tmp['url_parts'][0];
           $this->Params = array_slice($this->tmp['url_parts'], 1);
       }
       
       public function loadController () {
           global $Controller;
           
           include CONTROLLERS_DIR.$this->Action.'.php';
           $Controller = new $this->Action;
           $Controller->__init($this->Params);
       }
    }


    Как-то так, задача роутера в чем? что-бы отпарсить урл и передать нужные значения контроллеру, не так ли?)
  • rider-sx

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

    Spritz 5 марта 2010 г. 13:11, спустя 23 часа 45 минут 3 секунды

    Ну или отправлять массив с кусками урла в контроллер, который потом из настроек цепляет схему распределения кусков урла, и скармливает их в нужном порядке нужному экшену/эвенту/модулю:)
  • Trej Gun

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

    Spritz 5 марта 2010 г. 13:28, спустя 17 минут 36 секунд

    я ваще в ахуе от ваших тем с контроллерами и роутами
    доставляют лулзов неимоверно
    неужели сложно глянуть как дядьки сделали для например спринг мвц или тайлс
  • artoodetoo

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

    Spritz 5 марта 2010 г. 15:01, спустя 1 час 33 минуты 3 секунды

    http://habrahabr.ru/blogs/java/86433/

    остается добавить, что если вместо XML использовать простые пары ключ-значение, то наглядность повысится.
    ιιlllιlllι унц-унц
  • kostyl

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

    Spritz 5 марта 2010 г. 15:59, спустя 57 минут 27 секунд

    а чем не нравиться такой подход:
    в экшенах могут вызываться другие экшены. Какой экшен вызывать оределяется по параметру по текущей обрабатываемой переменной из объекта запроса. Эта переменная указывает на начало стека параметров запроса. После отработки экшена из стека выкидывается первый элемент и указатель ставиться в начало, то есть на следующий параметр запроса в стеке. Который определит следующий экшен. Также можно произвольно выбирать параметры по имени из копии стека в объекте запроса, если надо выполнить дополнительные действия в разрезе ветки графа экшенов.
    Йоу?
  • phpdude

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

    Spritz 5 марта 2010 г. 16:00, спустя 1 минуту 45 секунд

    kostyl, пиши лучше, нихуя не понятно что ты хочешь сказать.

    единственное что я бы сказал - чтобы можно было сделать

    App::subrequest("foo/bar/123.html");

    чтобы не делать location, и юзверу прикольно и нам ахуенно!)
    Сапожник без сапог
  • artoodetoo

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

    Spritz 5 марта 2010 г. 19:36, спустя 3 часа 35 минут 52 секунды

    kostyl, сложные предложения меня только расстраивают :( понял только "йоу" и то не уверен, что правильно.
    ιιlllιlllι унц-унц
  • Абырвалг

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

    Spritz 5 марта 2010 г. 20:46, спустя 1 час 9 минут 52 секунды

    а я сегодня свалил с работы пораньше и пошел пить
  • adw0rd

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

    Spritz 5 марта 2010 г. 21:15, спустя 29 минут 16 секунд

    а я на работе… хочу пиво…
    Спустя 10 сек.
    и кушать охота
    https://smappi.org/ - платформа по созданию API на все случаи жизни
  • md5

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

    Spritz 5 марта 2010 г. 21:16, спустя 7 секунд

    жду доставку роллов и суши
    будем седня альмеку голд ебошить
    Спустя 28 сек.
    господа, прошу прощения, думал, что это «дом флудера» :D
    все умрут, а я изумруд

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