Сделай роутер как zend - PullRequest
       1

Сделай роутер как zend

0 голосов
/ 30 марта 2012

У меня есть URL http://*.com/branch/module/view/id/1/cat/2/etc/3.

Это становится.

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

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

/*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, 'cat' => 2, 'etc' => 3,);

Как я могу сделать это, используя функцию php.Я знаю, что могу использовать for или foreach, но я думаю, что 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;
    }

}

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

Ответы [ 3 ]

1 голос
/ 30 марта 2012

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

0 голосов
/ 30 марта 2012

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

<code><?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]+))?@ui';

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

echo sprintf('<pre>%s
', var_export ($ сегмент, 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 голосов
/ 30 марта 2012

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...