ФорумПрограммированиеПыхнуть хотите?Готовые решения → Router

Router

  • uralkid

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

    Spritz 11 марта 2011 г. 10:33


    <?php
    /**
    * URL CHECK ROUTER
    *
    * @author UralKid ([email protected])
    * @version 1.0
    *
    */

    class Router {

    /**
    * Массив маршрутов
    *
    * @var array
    */
    public $map = array();

    /**
    * Массив
    *
    * @var unknown_type
    */
    public $route = array();

    /**
    * запрошенный маршрут
    *
    * @var unknown_type
    */
    public $request = &#39;&#39;;

    /**
    * рега
    *
    * @var unknown_type
    */
    public $regex = &#39;&#39;;

    const PERMIT = 0;

    const DENIED = 1;

    public function __construct($routes,$request){
    if(is_array($routes)){
    $this->map = $routes;
    $this->request = $request;
    } else {
    throw new Exception(&#39;not is valid a routes&#39;);
    }
    }

    public function process(){
    if($this->request){
    if($this->match()){
    return array(self::PERMIT,$this->GetRoute());
    }else {
    return array(self::DENIED,$this->request);
    }
    }
    return;
    }

    public function SetRoute($arg = array()) {
    $this->route[$arg[0]] = $arg[1];
    }

    public function GetRoute(){

    return $this->route;
    }

    public function match(){
    foreach ($this->map as $key=>$val){

    $this->regex = &#39;#^&#39;.$key.&#39;$#i&#39;;

    if(preg_match($this->regex,$this->request,$matches) ) {

    foreach ($val as $k=>$v){

    if(!strstr($v,&#39;$&#39;)){
    $this->setRoute(array($k,$v));
    }else {
    $num = substr(strstr($v,&#39;$&#39;),1);
    $this->setRoute(array($k,$matches[$num]));
    }
    }
    return true;
    }

    }
    return false;
    }

    }

    ?>



    Пример использования:


    class request {
    public $uri;

    public function Get(){

    $this->uri = $this->uri = preg_replace(&quot;/\/+/&quot;,&#39;/&#39;,$_SERVER[&#39;REQUEST_URI&#39;]);
    $this->uri = trim($this->uri,&#39;/&#39;);
    return $this->uri;

    }
    }


    $routes = array(
    &#39;blog.html&#39; => array(
    &#39;controller&#39; => &#39;blog&#39;,
    &#39;action&#39; => &#39;GetPostAll&#39;
    ),
    &#39;blog/post/([a-z_]+).html&#39; => array(
    &#39;controller&#39; =>&#39;blog&#39;,
    &#39;action&#39;=>&#39;getpostid&#39;,
    &#39;name&#39; => &#39;$1&#39;
    )
    );

    $request = new request();
    $router = new Router($routes,$request->get());




    http://bhc/blog/post/php_in_action.html

    array
    0 => int 0
    1 =>
    array
    &#39;controller&#39; => string &#39;blog&#39; (length=4)
    &#39;action&#39; => string &#39;getpostid&#39; (length=9)
    &#39;name&#39; => string &#39;php_inaction&#39; (length=12)



    Если на выходе у нас NULL то индекс, если массив то смотрим его метку, их две permit/denied и далее уже обрабатываем полученные данные как хотим.

  • NRG

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

    Spritz 11 марта 2011 г. 11:13, спустя 40 минут 44 секунды

    первое:
    - оформление просто ужасное
    - именование убогое
    - доки через раз и неинформативные

    второе:
    - дофига не нужного
    - зачем геетеры для пубичных свойств ?
    - зачем заводить свойство $uri в классе request ?
    - зачем классу Router свойство regex ?

    третье:
    - нах это вообще надо ?
    - чем твой самопал выгоднне готовых решений которые предоставляют популярные фреймворки ?
  • Абырвалг

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

    Spritz 11 марта 2011 г. 11:29, спустя 15 минут 59 секунд

    - чем твой самопал выгоднне готовых решений которые предоставляют популярные фреймворки ?

    например мой мего Pyha\Component\Router
  • NRG

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

    Spritz 11 марта 2011 г. 11:40, спустя 10 минут 42 секунды

    Абырвалг, вопрос адресовывался не тебе.
    зы твой лисапед я вообще не видел.
  • uralkid

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

    Spritz 11 марта 2011 г. 12:04, спустя 23 минуты 45 секунд

    лады соглашусь говнокод. доделаю доведу до ума.
    Мне надо! потому-что хочу! потому-что интересно!

    Популярный не означает лучший. у меня свой взгляд на все. нахер я слал эти фреймворки.

  • NRG

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

    Spritz 11 марта 2011 г. 12:17, спустя 13 минут 8 секунд

    у меня свой взгляд на все. нахер я слал эти фреймворки.

    юношеский максимализм. пройдет.
  • VaseninM

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

    Spritz 11 марта 2011 г. 13:03, спустя 45 минут 47 секунд

    пройдет

    не факт гыгыгы

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