Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Zend Framework 2子正则表达式路由_Php_Regex_Routing_Tree_Zend Framework2 - Fatal编程技术网

Php Zend Framework 2子正则表达式路由

Php Zend Framework 2子正则表达式路由,php,regex,routing,tree,zend-framework2,Php,Regex,Routing,Tree,Zend Framework2,我一直在拼命与ZF2抗争,我正在尝试创建一个路由树,以便: /手动-转到手动控制器,索引操作 /手动/[something]-转到手动控制器,制造商操作 /手动/[something]/[else]-转到手动控制器,类别操作 /手动/[something]/[else]/[foo]-转到手动控制器,模型操作 我使用过官方文档和其他几个网站,但我所能做的就是触发: /手动-转到手动控制器,索引操作 /手动/[something]-转到手动控制器构造函数,但不是操作 另外两个根本达不到控制器

我一直在拼命与ZF2抗争,我正在尝试创建一个路由树,以便:

  • /手动-转到手动控制器,索引操作
  • /手动/[something]-转到手动控制器,制造商操作
  • /手动/[something]/[else]-转到手动控制器,类别操作
  • /手动/[something]/[else]/[foo]-转到手动控制器,模型操作
我使用过官方文档和其他几个网站,但我所能做的就是触发:

  • /手动-转到手动控制器,索引操作
  • /手动/[something]-转到手动控制器构造函数,但不是操作
另外两个根本达不到控制器

        'manual' => array(
            'type' => 'literal',
            'options' => array(
                'route' => '/manual',
                'defaults' => array(
                    'controller' => 'Applicaton\Controller\Manual',
                    'action' => 'index'
                ),
            ),
            'may_terminate' => true,
            'child_routes' => array(
                // Segment route for viewing one blog post
                'manufacturer' => array(
                    'type' => 'segment',
                    'options' => array(
                        'route' => '/[:manufacturer]',
                        'constraints' => array(
                            'manufacturer' => '[a-zA-Z0-9_-]+'
                        ),
                        'defaults' => array(
                            'action' => 'manufacturer'
                        )
                    ),
                    'may_terminate' => true,
                    'child_routes' => array(
                        'category' => array(
                            'type' => 'segment',
                            'options' => array(
                                'route' => '/[:category]',
                                'constraints' => array(
                                    'category' => '[a-zA-Z0-9_-]+'
                                ),
                                'defaults' => array(
                                    'action' => 'category'
                                )
                            ),
                            'may_terminate' => true,
                            'child_routes' => array(
                                'model' => array(
                                    'type' => 'segment',
                                    'options' => array(
                                        'route' => '/[:model]',
                                        'constraints' => array(
                                            'model' => '[a-zA-Z0-9_-]+'
                                        ),
                                        'defaults' => array(
                                            'action' => 'model'
                                        )
                                    )
                                )
                            )
                        )
                    )
                )
            )
        ),
提前感谢您的帮助,任何帮助都将不胜感激

更新: 以下是我的控制器操作:

public function manufacturerAction() {
    echo 'I am in the manufacturer action!';
    return new ViewModel();
}

它可以使用正则表达式来完成。在module.config.php中修改路由,如下所示

'manual' => array(
    'type' => 'Literal',
    'options' => array(
        'route' => '/manual',
        'defaults' => array(
            'controller' => 'Application\Controller\Manual',
            'action' => 'index',
        ),
    ),
),
'manufacturer' => array(
    'type' => 'Zend\Mvc\Router\Http\Regex',
    'options' => array(
        'regex' => '/manual/(?<manufacturer>[a-zA-Z0-9_-]+)',
        'defaults' => array(
            'controller' => 'Application\Controller\Manual',
            'action' => 'manufacturer',
        ),
        'spec' => '/manual/%manufacturer%',
    ),
),
'category' => array(
    'type' => 'Zend\Mvc\Router\Http\Regex',
    'options' => array(
        'regex' => '/manual/(?<manufacturer>[a-zA-Z0-9_-]+)/(?<category>[a-zA-Z0-9_-]+)',
        'defaults' => array(
            'controller' => 'Application\Controller\Manual',
            'action' => 'category',
        ),
        'spec' => '/manual/%manufacturer%/%category%',
    ),
),
'model' => array(
    'type' => 'Zend\Mvc\Router\Http\Regex',
    'options' => array(
        'regex' => '/manual/(?<manufacturer>[a-zA-Z0-9_-]+)/(?<category>[a-zA-Z0-9_-]+)/(?<model>[a-zA-Z0-9_-]+)',
        'defaults' => array(
            'controller' => 'Application\Controller\Manual',
            'action' => 'model',
        ),
        'spec' => '/manual/%manufacturer%/%category%/%model%',
    ),
),
“手动”=>阵列(
'type'=>'Literal',
“选项”=>数组(
“路由”=>“/手动”,
“默认值”=>数组(
“控制器”=>“应用程序\控制器\手动”,
“操作”=>“索引”,
),
),
),
“制造商”=>阵列(
'type'=>'Zend\Mvc\Router\Http\Regex',
“选项”=>数组(
“正则表达式”=>“/手动/(?[a-zA-Z0-9_-]+)”,
“默认值”=>数组(
“控制器”=>“应用程序\控制器\手动”,
“操作”=>“制造商”,
),
“规格”=>“/手动/%manufacturer%”,
),
),
“类别”=>数组(
'type'=>'Zend\Mvc\Router\Http\Regex',
“选项”=>数组(
“regex'=>”/手动/(?[a-zA-Z0-9_-]+)/(?[a-zA-Z0-9_-]+),
“默认值”=>数组(
“控制器”=>“应用程序\控制器\手动”,
“操作”=>“类别”,
),
“规格”=>“/手动/%manufacturer%/%category%”,
),
),
'model'=>数组(
'type'=>'Zend\Mvc\Router\Http\Regex',
“选项”=>数组(
“regex'=>”/手动/(?[a-zA-Z0-9_-]+)/(?[a-zA-Z0-9_-]+)/(?[a-zA-Z0-9_-]+),
“默认值”=>数组(
“控制器”=>“应用程序\控制器\手动”,
“操作”=>“模型”,
),
“规格”=>“/手动/%manufacturer%/%category%/%model%”,
),
),

Hi Finny,这几乎完美地工作了,除了“制造商”路线不工作外,它将其发送到控制器,但无法发送请求。我已经在上面添加了控制器操作,但是它非常标准……嗨,本,你能提供一些关于你的问题的细节吗;就像你试图访问的url和你的更新路线一样?嗨,芬尼,我的更新路线和你上面的路线一模一样。我的URL应该是,不管我在URL的最后一部分输入了什么,它确实到达了“制造商操作”…@Ben你必须捕获路线并做适当的操作。在manufacturerAction()中,使用以下命令获取路由参数:$制造商=$this->params()->fromRoute('manufacturer');截至给定的url$制造商将填充为尼康