В чем разница Route, Router, Request?

fawkes

Новичок
В каких ситуациях может быть понадобится имя роута?
Например в kohana имя задается, в slim - нет. Причем в мануале не пишут, зачем оно понадобится...
 

hell0w0rd

Продвинутый новичок
В каких ситуациях может быть понадобится имя роута?
Например в kohana имя задается, в slim - нет. Причем в мануале не пишут, зачем оно понадобится...
Чтобы была возможность пользоваться роутом.
- создавать ссылки
PHP:
 $app->generateUrl('catalog', ('id' => 25));
- искуственно вызывать роут, получая от него содержимое, на пример.
В общем чтобы обращаться к роуту без непосредственно запроса
 

fawkes

Новичок
GusakovNick предельно ясно, спасибо.

вопрос насчет chaining'a:
есть класс:
PHP:
class Foo
{
   private $arr = [];
   public function A($bar, $quz)
   {
     $this->arr[] = [
     'key1' => $bar,
     'key2' => $quz
     ];
     return $this;
   }

   public function B($baz = [])
   {
     //@todo ...
     return $this;
   }
   public function getArr()
   {
    return $this->arr;
   }
}
// как добавить в массив $this->arr это 'key3' => $baz 
// через вызов 
$obj = new Foo();
$obj->A('value1', 'value2')->B(['key3' => 'value3']);
// ??
то есть после
PHP:
print_r($obj->getArr())
вывело
PHP:
Array
(
    [0] => Array
        (
            [key1] => value1
            [key2] => value2
            [key3] => value3
        )
)
 

hell0w0rd

Продвинутый новичок
PHP:
class Router
{
    private $chain = array();

    public function run($route)
    {
        uasort($this->chain, function ($a, $b) {
                $left = $a['priority'];
                $right = $b['priority'];
                if ($left == $right) {
                    return 0;
                } else {
                    return $left < $right ? -1 : 1;
                }
            }
        );
        foreach($this->chain as $pattern => $r){
            if(preg_match($pattern, $route)){
                call_user_func($r['controller']);
            }
        }
    }

    public function addRoute($pattern, Callable $callback, $priority = 0)
    {
        $this->chain[$pattern] = array(
            'controller' => $callback,
            'priority'   => $priority
        );
        return $this;
    }
}
Вот что-то такое чтоль? Не тестил
 

fawkes

Новичок
Мне спать пора =\
Проще простого:
PHP:
class Foo
{
   private $arr = [];
   private $name;
   public function A($name, $bar, $quz)
   {
     $this->name = $name;
     $this->arr[$this->name] = [
     'key1' => $bar,
     'key2' => $quz
     ];
     return $this;
   }

   public function B($baz = [])
   {
     $this->arr[$this->name]['key3'] = $baz;
     return $this;
   }
   public function __destruct()
   {
    print_r($this->arr)
   }
}
 

Vladex

Новичок
Вот еще роутер нашел
https://bitbucket.org/JREAM/route
Там несколько маршрутов задано
PHP:
$route->add('/', function() {
        echo 'HOME';
});

$route->add('/name', function() {
        echo 'Name Home';
});

$route->add('/name/.+', function($name) {
        echo "Name $name";
});


$route->add('/this/is/the/.+/story/of/.+', function($first, $second) {
        echo "This is the $first story of $second";
});
/ работает пишет home
name/ выдает пустую страницу Not Found денвера
Не выходит каменный цветок...
 

Vladex

Новичок
Не могу разобраться!
http://www.youtube.com/playlist?list=PL8931096D81D44C4E
https://github.com/Jontyy/PHP-Basic-MVC-Framework
.htaccess такой
RewriteEngine On
#RewriteBase /tests/PHP-Basic-MVC-Framework/
RewriteCond %{REQUEST_FILENAME} !-f
#only for localhost
#RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule .* index.php [L]
AddDefaultCharset utf-8
RewriteBase почему то не работает...
В файле request.php есть код для разделения url
PHP:
       public function __construct(){
            $parts = explode('/',$_SERVER['REQUEST_URI']);
            $parts = array_filter($parts);
           
            $this->_controller = ($c = array_shift($parts))? $c: 'index';
            $this->_method = ($c = array_shift($parts))? $c: 'index';
            $this->_args = (isset($parts[0])) ? $parts : array();
        }
Задаю любой элемент
PHP:
$parts[0]
$parts[1]
$parts[2]
Все равно показывает
PHP:
Request Object ( [_controller:Request:private] => index [_method:Request:private] => tests [_args:Request:private] => Array ( [0] => PHP-Basic-MVC-Framework [1] => ) )
А когда комментирую код
  // $parts = array_filter($parts);
Тогда выводит весь массив
hello world
hello world
hello universe
Вот такая проблема.
upd...
Работает только в корне на хостинге
http://brightproject.ru/
http://brightproject.ru/test
http://brightproject.ru/error
 
Сверху