2012-03-29 2 views
0

У меня есть URL http: // * .com/branch/module/view/id/1/cat/2/etc/3.Сделать роутер, как zend

Будет.

array 
(
    'module'=>'branch', 
    'controller'=>'module', 
    'action'=>'view' 
); 

next Мне нужно получить параметры. У меня этот массив.

/*function getNextSegments($n,$segments) { 
    return array_slice ($q = $this->segments, $n + 1); 
} 
$params = getNextSegments(3); 
*/ 
array (0 => 'id', 1 => '1', 2 => 'cat', 3 => '2', 4 => 'etc', 5 => '3');//params 

И я хочу преобразовать его в этом одно: массив ( 'ID' => 1, 'кот' => 2, 'и т.д.' => 3, );

Как я могу это сделать, используя php-функцию. Я знаю, что я могу сделать, используя для или Еогеасп, но я думаю, что PHP имеет такую ​​функцию, но я не могу найти :(. Спасибо.

class A { 
    protected function combine($params) { 

     $count = count ($params); 
     $returnArray = array(); 

     for($i = 0; $i < $count; $i += 2) { 
      $g = $i % 2; 
      if ($g == 0 or $g > 0) { 
       if (isset ($params [$i]) and isset ($params [$i + 1])) 
        $returnArray [$params [$i]] = $params [$i + 1]; 
      } 
     } 
     return $returnArray; 
    } 

} 

Это работает нормально. Если кто-нибудь имеет лучшую логику для этого, пожалуйста, помогите . Еще раз спасибо.

+0

Где вы получаете этот массив из? –

+0

Я редактировал вопрос, теперь вы можете видеть, где я его получаю. – Vahan

+0

Поскольку вы отметили это с помощью ZF, не можете ли вы просто сделать '$ this -> _ getAllParams()'? –

ответ

1

PHP не имеет встроенную функцию для этого. Я бы просто реализовать с взрываются и петля, не должно быть трудно.

+0

Нет, это не сложно. Я думал, что php имеет такую ​​функцию. – Vahan

0

Я использую функцию, как это в моем расширенном классе Zend_Controller_Action.

public function getCleanParams() 
{ 
    $removeElements = array(
     'module' => '', 
     'controller' => '', 
     'action' => '', 
     '_dc' => '' 
    ); 
    return array_diff_key($this->_request->getParams(), $removeElements); 
} 

Это даст вам ваши параметры в чистой моде и формате, который вы хотите в

0

Вы можете начать строить свой маршрутизатор со следующим регулярным выражением (имя файл index.php):.

<?php 

$pattern = '@^(?P<module>branch)/'. 
      '(?P<controller>module)/'. 
      '(?P<action>view)'. 
      '(:?/id[s]?/(?P<id>[0-9]+))?'. 
      '(:?/cat[s]?/(?P<cat>[0-9]+))?'. 
      '(:?/etc[s]?/(?P<etc>[0-9]+))[email protected]'; 

preg_match($pattern, trim($_SERVER['REQUEST_URI'], '/'), $segment); 

echo sprintf('<pre>%s</pre>', var_export($segment, true)); 

Предполагая, что вы установили PHP 5.4.x, вы можете набрать в командной строке:

% php -S localhost:8765 

Теперь перейдите к http://localhost:8765/branch/module/view/id/1/cat/2/etc/3

Выход будет (удаленные цифровые клавиши, кроме 0 для ясности):

array (
    0 => 'branch/module/view/id/1/cat/2/etc/3', 
    'module' => 'branch', 
    'controller' => 'module', 
    'action' => 'view', 
    'id' => '1', 
    'cat' => '2', 
    'etc' => '3', 
) 
+0

У меня есть маршрутизатор, как этот. Проблема в том, что идентификатор может быть идентификатором, и поэтому на uri может быть http: //*.com/branch/module/view/ids/1/cats/2/etcs/3 Так что теперь мне нужно {ids} таким образом Я должен сделать еще один маршрут для этого. – Vahan

+0

Я обновил регулярное выражение, чтобы вы могли иметь сегменты с именами «id» или «id» и «cat» или «cats» ... –

Смежные вопросы