标签: zend-route

使用Zend Framework中的Zend_Controller_Router_Route_Regex在参数中匹配多个URL

我正在使用Zend开发一个Rest Controller,我对url到Router的映射感到困惑.

基本上我读了Zend路由器,我无法计划我的网址,以满足上述路线.

这些是我应该映射到路由器的一些网址.

  1. HTTP://localhost/api/v1/tags.xml

  2. http://localhost/api/v1/tags.xml?abc = true (param:abc = true)

  3. http://localhost/api/v1/tags/123456.xml (param:123456.xml)

  4. http://localhost/api/v1/tags/123456/pings.xml (参数:123456,pings.xml)

  5. http://localhost/api/v1/tags/123456/pings.xml?a = 1&b = 2(参数:123456,pings.xml,a = 1,b = 2)

  6. http://localhost/api/v1/tags/123456/pings/count.xml(参数:123456,ping,count.xml)

我正在计划,对于网址模式1到3,"标签"应该是控制器,对于网址模式4到6,"ping"应该是控制器.

现在我不确定如何配置路由器,以便上述方案可行.请注意,我无法更改这些网址.我可以提供100分的良好答案.

php zend-framework zend-route

8
推荐指数
1
解决办法
3365
查看次数

Zend Framework路线:未知数量的参数

我正在尝试为N级深度编写路线.所以通常的类别URL看起来像这样:

http://website/my-category/my-subcategory/my-subcategory-level3/my-subcategory-level4
Run Code Online (Sandbox Code Playgroud)

它有一个未知的深度,我的路线必须匹配所有可能的水平.我为此做了一个路线,但我无法从我的控制器中获取所有参数.

$routeCategory = new Zend_Controller_Router_Route_Regex(
    '(([a-z0-9-]+)/?){1,}',
        array(
            'module' => 'default',
            'controller' => 'index',
            'action' => 'index'
        ),
        array( 1 => 'path'),
        '%s'
);
$router->addRoute('category', $routeCategory);
Run Code Online (Sandbox Code Playgroud)

我似乎找不到将路由匹配的params发送到控制器的方法.如果您有更好的解决方案,我愿意接受建议!

php zend-framework zend-route

6
推荐指数
1
解决办法
2428
查看次数

Zend_Controller_Router_Exception:未定义Route default

我正在尝试测试一个控制器.Zend Tool生成了以下代码:

class Default_CarrinhoControllerTest extends Zend_Test_PHPUnit_ControllerTestCase
{

public function setUp()
{
    $this->bootstrap = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini');
    parent::setUp();
}

public function testIndexAction()
{
    $params = array('action' => 'index', 'controller' => 'Carrinho', 'module' => 'default');
    $urlParams = $this->urlizeOptions($params);
    $url = $this->url($urlParams);
    $this->dispatch($url);

    // assertions
    $this->assertModule($urlParams['module']);
    $this->assertController($urlParams['controller']);
    $this->assertAction($urlParams['action']);
    $this->assertQueryContentContains(
        'div#view-content p',
        'View script for controller <b>' . $params['controller'] . '</b> and script/action name <b>' . $params['action'] . '</b>'
        );
   }
}
Run Code Online (Sandbox Code Playgroud)

PHPUnit Bootstrap

<?php

// Define path to application directory
defined('APPLICATION_PATH') …
Run Code Online (Sandbox Code Playgroud)

phpunit zend-framework zend-test zend-route

6
推荐指数
1
解决办法
4518
查看次数

如何在Zend Framework中的URL开头添加变量?

我在这里尝试创建网址,如:

/admin/login
/moderator/login
Run Code Online (Sandbox Code Playgroud)

请求将由相同的控制器和为登录做出的动作提供,即 /account/login/<type>

目前,我可以制作以下网址:

/login/admin

/login/moderator

我当前的配置文件如下所示:

resources.router.routes.login.route = "login/:type"
resources.router.routes.login.defaults.controller = "account"
resources.router.routes.login.defaults.action = "login"
Run Code Online (Sandbox Code Playgroud)

我无法弄清楚,关于如何将type变量放在URL的开头,我试过但它给出了服务器错误. 编辑

我完成了这个,但无法理解为什么这不能更早地工作:

resources.router.routes.login.route = ":type/login"
resources.router.routes.login.defaults.controller = "account"
resources.router.routes.login.defaults.action = "login"
Run Code Online (Sandbox Code Playgroud)

编辑

是否有可能使这种安排更加灵活,以便: /login=>/admin/login

我不是通过.htaccess寻找解决方案

php zend-framework zend-route

6
推荐指数
1
解决办法
194
查看次数

子路由中的ZF2可选路由约束

我在路径中的可选约束存在问题,该路径在其子项中是非可选的.我的路由结构如下:

'profile' => [
    'type' => 'segment',
    'options' => [
        'route' => '/profile[/:id]',
        'constraints' => ['id' => '[0-9]*'],
        'defaults' => [
            'controller' => 'User\Controller\User',
            'action' => 'profile'
        ]
    ],
    'may_terminate' => true,
    'child_routes' => [
        'sessions' => [
            'type' => 'literal',
            'options' => [
                'route' => '/sessions',
                'defaults' => ['action' => 'sessions']
            ]
        ]
    ]
]
Run Code Online (Sandbox Code Playgroud)

在我看来应该给我以下路线:

  1. /profile - 工作
  2. /profile/123 - 工作
  3. /profile/sessions- 不起作用
  4. /profile/123/sessions - 工作

当我在URL视图助手中使用路由3时,我收到以下错误:

$this->url('profile/sessions');
Run Code Online (Sandbox Code Playgroud)

Zend\Mvc\Router\Exception\InvalidArgumentException:缺少参数"id"

我原来[0-9]+作为我的约束,但使它成为可选(*)似乎没有帮助.以前有没有人遇到这个案子?

php zend-route zend-framework2

6
推荐指数
2
解决办法
1万
查看次数

如何使用zend路由器主机名路由多个子域

我需要在Zend中创建路由来简单地复制当前的实时站点url结构,这种结构很不一致

我想要做的是路由子域如下:

www.site.com - >静态路由器

a.site.com&b.site.com - >类别控制器

c.site.com和d.site.com - >位置控制器

其余子域 - >用户控制器

谁能指导我如何解决这个问题,谢谢.

更新:

首先感谢Fge,投票给你答案,它有效,但我还需要一些建议:

  1. 由于每个规则都有许多子域,因此有一种比在循环中添加规则更好的方法

    foreach($ subdomains as $ a){$ tr = new Zend_Controller_Router_Route_Hostname("$ a.site.com",array('module'=>'mod','controller'=>'ctrl','param_1'=> $一个 )); $路由器 - > addRoute($一个,$ TR); }

  2. 如何将它与其他路由类型结合起来解析参数(链接?),比如http://a.site.com/:b/:c,我想把它解析为param_1(a),param_2(b) ,param_2(c)

routing zend-framework zend-route

5
推荐指数
1
解决办法
5764
查看次数

Zend框架无法路由已翻译的子路由

我是Zend框架3的新手,并试图翻译路线,我已经部分成功.我能够翻译主路线并将其重定向到所需的位置,但对于子路线,翻译工作但重定向不起作用.能帮到我吗,我的代码如下.

module.config.php

'router' => [
        'router_class'           => TranslatorAwareTreeRouteStack::class,
        'routes' => [
            'setting' => [
                'type'    => Segment::class,
                'options' => [
                    'route' => '/{locale}/{setting}',

                    'defaults' => [
                        'locale'     => 'de',
                        'controller' => Controller\SettingController::class,
                        'action'     => 'index',
                    ],
                ],

                'may_terminate'=>true,
                 'child_routes' =>[
                        'add' =>[
                            'type'      =>'Segment',
                            'options'   =>[
                                'route'         =>'/{add}',
                                'defaults'=> [
                                     'controller' => Controller\SettingController::class,
                                     'action'     => 'add',
                                ],
                            ],  
                        ],
                 ],
            ],
        ],
    ],
Run Code Online (Sandbox Code Playgroud)

Module.php

   public function onBootstrap(MvcEvent $e)
    {
        $eventManager        = $e->getApplication()->getEventManager();
        $moduleRouteListener = new ModuleRouteListener();
        $moduleRouteListener->attach($eventManager);

        $language_session = new …
Run Code Online (Sandbox Code Playgroud)

php zend-translate zend-route zend-framework2 zend-framework3

5
推荐指数
1
解决办法
476
查看次数

Zend Route Url与正则表达式

我正在尝试创建一个"覆盖"这种URL的路由:

www.test.com/parent1/parent2/parent3/item

www.test.com/parent1/parent2/parent3/parent4/item1

未指定的那些父母的数量,它应该只用于为网站URL提供更好,更直观的外观.主要参数是"item".

我想解决这个问题的唯一方法就是使用Route_Regex,所以我尝试用这样的方法完成这个路由任务:

routes.test.type = "Zend_Controller_Router_Route_Regex"
routes.test.route = "test/(?:.*)?([^\/]+)"
routes.test.defaults.module = default
routes.test.defaults.controller = test
routes.test.defaults.action = index
routes.test.map.1 = "path"
routes.test.map.2 = "item"
routes.test.reverse = "test/%s%s"
Run Code Online (Sandbox Code Playgroud)

我没有对此进行过多次测试,因为我不确定我是否做了正确的事情......我不知道这个正则表达式应该是什么样的,我应该怎样对待这条"路径".

你能告诉我应该怎样做才能满足这种路线需求吗?所以,我只需要那个路径(parent1,parent2等),而主要的参数就是"item"......

regex url zend-framework zend-route

4
推荐指数
1
解决办法
5424
查看次数

如何保留默认的Zend路由

我正在尝试设置有意义的URL,例如http://www.site.com/company/department,但它会破坏我在Controller/Action形状中的现有URL.

在我的bootstrap中,我按如下方式创建新路由:

$frontController = Zend_Controller_Front::getInstance();
$router = $frontController->getRouter();
$route = new Zend_Controller_Router_Route(":company/:dpt", array('controller'   => 'browse'));
$router->addRoute("browse", $route);
Run Code Online (Sandbox Code Playgroud)

当我浏览到http://www.site.com/ABC_Co/dry_goods时,它会将我路由到BrowseController中的IndexAction.大!问题是我的其他管理员相关的URL - 例如/ company/create等 - 也在那里指挥.

有没有办法让Zend首先进行默认的 Controller/Action匹配,并且只在失败时恢复到Browse路由?

谢谢!

zend-framework zend-route

4
推荐指数
1
解决办法
936
查看次数

Zend路由和HTTP动词/方法

嗨我想在Zend应用程序中设置一些REST路由,我想知道如何限制可以访问路由的HTTP方法.

$route = new Zend_Controller_Router_Route('user/reset_password', array(
                'module' => 'default',
                'controller' => 'user',
                'action' => 'resetpassword'
            ));
$front_controller->getRouter()->addRoute('reset_password', $route);
Run Code Online (Sandbox Code Playgroud)

在这条路线中,我想指定此路由将响应的HTTP动词,如GET,POST,PUT等,例如向数组添加"method"=>"POST".

谢谢,

rest zend-framework routes http zend-route

4
推荐指数
1
解决办法
957
查看次数