Linux за българи: Форуми

Програмиране => Web development => Темата е започната от: b2l в Feb 14, 2012, 22:34



Титла: Автоматична детекция на релативно URL - MVC
Публикувано от: b2l в Feb 14, 2012, 22:34
Написах си един рутер, който има за цел да ми създава инстанция на обект от клас подаден по URL-то. Например: http://host/controller/method/arguments.
Е то всичкото добре обаче аз си бачкам на Localhost-а като съм си едитнал default сайта да ми е сочи към: /var/www/project/, но ме накараха да го оставя както си е по default (/var/www) и проекта да си го зарежда като: http://host/project/. При което моя рутер гръмна. Логиката която бях вкарал беше следната:
Код
GeSHi (PHP):
  1. ...
  2. $url = explode('/', trim($_SERVER['REQUEST_URI'], '/'));
  3.        array_shift($url);
  4.  
  5.        // get controller name
  6.        if (empty($url[0])) {
  7.            $controller = //some php code here
  8.        } else {
  9.            $controller = //another php code here
  10.        }
  11.  
  12.        // get method name of controller
  13.        if (empty($url[1])){
  14.            $method = 'indexAction';
  15.        } else {
  16.            $method = $url[1] . 'Action';
  17.        }
  18.  
  19.        //get arguments
  20.        //and so on
  21.  
  22.        $cont = new $controller;
  23.        $cont->$method($arguments);
И както с сещате за да проработи рутера ми трябваше да сменям индексите на масива, което не ми хареса. Ако тестовия проект е в: /var/www/site/test/project/ver1.0/ - то тогава мамата си трака.
Някаква идея или решение на този казус.

PS: Дефинирах си RELATIVE_URL променлива, която в момента ми е равна на SITE_ROOT . '/project' - ама проблема ми с масива и цепенето на request string-а си остава.


Титла: Re: Автоматична детекция на релативно URL - MVC
Публикувано от: VladSun в May 29, 2012, 17:56
mod_rewrite?


Титла: Re: Автоматична детекция на релативно URL - MVC
Публикувано от: b2l в May 29, 2012, 18:01
Не, не. В момента използвам рутера на opencart. Да, има запис и в .htaccess-а, ама целта на заданието ми беше да си напиша мой рутер, не да взимам на готово.

PS: А това, което съм написал по-долу е бъгаво.


Титла: Re: Автоматична детекция на релативно URL - MVC
Публикувано от: SmashThePain в May 29, 2012, 18:13
Не виждам смисъл да преоткриваш топлата вода :)
Ако все пак държиш да го правиш, след като сплитнеш URL-а се движи отзад напред. HTTP протокола има достатъчно удобен начин за предаване на параметри. Тази част arguments от адреса е напълно излишна. Аргументите предполагат променлив брой, понякога въобще може да ги няма. Това само ще ти усложни парсването.

Ако масивът има само един елемент ползваш дифолъен контролер и метод.
Ако масивът е с два елемента последния е контролера.
При 3 или повече елементи. Взимаш последните два и дерзаеш.

Този shift е тежка и безмислена операция.

Преди време правих рутер за Node.js Стратегията ми беше следната. Регистрирам обект за определен URL. Структурата беше хеш таблица. При рикуестване на URL проверявах дали имам слушател. Ако имам извиквам `index` метода му.
Ако нямам, рутера връщаше 404.


Титла: Re: Автоматична детекция на релативно URL - MVC
Публикувано от: teleport в May 29, 2012, 20:48
Вместо $_SERVER['REQUEST_URI'] ползвай $_SERVER['PATH_INFO'].