标签: zend-framework-routing

如何在ZF2/ZF3 url视图助手中添加查询参数

我正在尝试使用路由创建带有查询字符串的URL,如下所示:

$this->url('users') -> /users
$this->url('users', ['sort' => 'desc']) -> /users?sort=desc
Run Code Online (Sandbox Code Playgroud)

然而,这似乎不起作用(第二个助手实际输出/users).根据这个非官方的,过时的文档,曾经有一种方法可以通过附加/query到路由名称来实现,但是这会给出一个路由未找到的异常.

可以使用当前的url帮助程序完成吗?

php zend-framework2 zend-framework-routing zend-framework3

21
推荐指数
3
解决办法
3万
查看次数

ZF2:如何将参数传递给转发插件,然后我可以将它转发给我转发的方法?

我在Foo Controller中有一个Action方法,它需要参数:

public function fooAction($one, $two) {
    $a = one;
    $b = $two;
}
Run Code Online (Sandbox Code Playgroud)

我需要从一些Boo Controller 的其他方法转发到该方法.其中一个参数必须是参考参数.手册的唯一例子是:

$result = $this->forward()->dispatch('Boo\Controller\Boo', array('action' => 'boo'));
Run Code Online (Sandbox Code Playgroud)

没有任何其他参数.但他们写道:

$ params是一个可选的参数数组,用于查看此特定请求的RouteMatch对象.

所以,我尝试过:

$result = $this->forward()->dispatch('Boo\Controller\Boo', array(
                                                      'action' => 'boo',
                                                      'one' => &$one,
                                                      'two' => $two,
                                                 ));
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

有没有办法将其他参数传递给前向控制器?

UPD:

这些也不起作用:

$result = $this->forward()->dispatch('Boo\Controller\Boo', array(
                                                      'action' => 'boo',
                                                      'params' => array(
                                                          'one' => &$one,
                                                          'two' => $two,
                                                     )));


$result = $this->forward()->dispatch('Boo\Controller\Boo', array(
                                                      'action' => 'boo',
                                                      'options' => array(
                                                          'one' => &$one,
                                                          'two' …
Run Code Online (Sandbox Code Playgroud)

php zend-framework-mvc zend-framework2 zend-framework-routing

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

Zend Framework 2段路由所需的段

我正在尝试创建一个路径(或两个),让我使用以下URL格式调用两个不同的操作.

mydomain.com/profile
mydomain.com/profile/1234/something
Run Code Online (Sandbox Code Playgroud)

对于第二种格式,1234应该是必需的整数值,而something应该是可选的字符串.通过使用文字路线,第一种格式很简单.我想我可以为第二种格式添加一个段子路由,但我无法让它工作.我试图省略第一种格式,只用分段路线做第二种格式,但我也没有成功.

这是我尝试过的:

'profile' => array(
    'type' => 'Zend\Mvc\Router\Http\Literal',
    'options' => array(
        'route' => '/profile',
        'defaults' => array(
            'controller' => 'User\Controller\User',
            'action' => 'profile'
        )
    ),
    'child_routes' => array(
        'profile_view' => array(
            'type' => 'Zend\Mvc\Router\Http\Segment',
            'options' => array(
                'route' => '/:code[/:username]',
                'constraints' => array(
                    'code' => '[0-9]*',
                    'username' => '[a-zA-Z0-9_-]*'
                ),
                'defaults' => array(
                    'controller' => 'User\Controller\User',
                    'action' => 'view_profile'
                )
            )
        )
    )
)
Run Code Online (Sandbox Code Playgroud)

因为mydomain.com/profile,我得到以下错误:

Fatal error: Uncaught exception 'Zend\View\Exception\RuntimeException' with …
Run Code Online (Sandbox Code Playgroud)

php routing zend-route zend-framework2 zend-framework-routing

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

zf2路由器:一个模块使路由器无法找到另一个模块.我怎样才能使两者都有效?

我们刚刚开始使用zf2,所以其他人制作了一个Thumbnail服务器模块,然后我添加了一个Lookup服务器模块.我称之为服务器,因为它们都是RESTful apis.最初它们似乎在一起工作,但有人对我的模块进行了一些更改,现在除非从application.config.php模块列表中删除Lookup,否则缩略图服务器将无法工作.Lookup服务器无论如何都可以.查看代码,我看不到对Lookup所做的更改会如何影响Thumbnail.我得到的错误看起来像这样:

<h1>A 404 error occurred</h1>
<h2>Page not found.</h2>
<p>The requested controller was unable to dispatch the request.</p>
<dl>
<dt>Controller:</dt>
<dd>Lookup\Controller\Lookup</dd>
</dl>
Run Code Online (Sandbox Code Playgroud)

这是application.config.php看起来像:

<?php
return array(
    'modules' => array(
        'Application',
        'SanRestful',
        'Album',
        'AlbumRest',   
        'Thumbnail',         
        'Lookup',
        'AP_XmlStrategy',
    ),
    'module_listener_options' => array(
        'config_glob_paths'    => array(
            'config/autoload/{,*.}{global,local}.php',
            'config/autoload/{,*.}' . (getenv('APPLICATION_ENV') ?: 'production') . '.php',
        ),
        'module_paths' => array(
            './module',
            './vendor',
        ),
    ),
);
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,最初的专辑模块和其他一些实验模块.My Lookup模块使用Allessandro Pietrobelli提供的优秀AP_XmlStrategy模块.

下面是缩略图module.config.php.它有一个可能没有被使用的约束,因为没有名为"id"的参数,但这不应该搞乱,是吗?

<?php
return array(
    'controllers' => array( …
Run Code Online (Sandbox Code Playgroud)

zend-framework2 zend-framework-routing

3
推荐指数
1
解决办法
6362
查看次数

Zend框架2,分页路由问题

我在zf2中有关于zend分页和路由的问题.我想在同一页面上显示反馈项的详细信息及其子项(操作)列表.我的路线代码如下

$routes['dashboard_inbox_actions'] =  array(
    'type'      => 'segment',
    'options'   => array(
        'route' => '/dashboard/inbox/detail[/:feedback[/actions/page/:page]]',
        'constraints' => array(  
            'feedback'     => '[0-9]+',
            'page'         => '[0-9]+',
        ),
        'defaults' => array(      
             '__NAMESPACE__' => 'Dashboard\Controller',
            'controller'    => 'inbox' ,
            'action'        => 'detail',                
            'feedback'      => 0 ,
            'page'          => 1
        ),
    ),
);
Run Code Online (Sandbox Code Playgroud)

我通过URL传递

/dashboard/inbox/detail/4
Run Code Online (Sandbox Code Playgroud)

在列表页面中,用于呈现子项目的提供页面.

<?php echo $this->paginationControl($this->paginator, 'Sliding' ); ?>
Run Code Online (Sandbox Code Playgroud)

创建分页网址,反馈ID为0(我的问题)

/dashboard/inbox/detail/0/actions/page/2
/dashboard/inbox/detail/0/actions/page/3
Run Code Online (Sandbox Code Playgroud)

我手动粘贴网址

 /dashboard/inbox/detail/4/actions/page/2
Run Code Online (Sandbox Code Playgroud)

它将第2页显示为活动项.我的控制器代码工作正常并给我结果,但仍然paginationControl创建反馈ID为0的网址.

zend-framework2 zend-framework-routing

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

如何从网址中删除未使用的参数?

我正在使用Zend Framework和URL View Helper来创建URL

我的导航中有一些这样的行:

$this->url(array('controller' => 'index', 'action' => 'index'))
$this->url(array('controller' => 'who', 'action' => 'view', 'id' => $row->who_id));
$this->url(array('controller' => 'projects', 'action' => 'view', 'id' => $row->mai_id));
$this->url(array('controller' => 'content', 'action' => 'view', 'type' => 'theater', 'id' => $row->the_id));
$this->url(array('controller' => 'shows', 'action' => 'view'));
Run Code Online (Sandbox Code Playgroud)

这样,首先,我有一些像这样的URL

http://ccgss.local/information/location
http://ccgss.local/who/view/id/1
Run Code Online (Sandbox Code Playgroud)

但是当我访问具有更多参数的另一个链接时,http://ccgss.local/content/view/id/1/type/theater 它会混淆仍然存在的参数:http://ccgss.local/who/view/id/1/type/theater

我的意思是,当我访问另一个页面时,参数不会清理.

我该如何解决?

php zend-framework zend-framework-routing

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

在Zend Framework 1.12中,Controller,Action区分大小写的规则是什么

我在一个项目中使用Zend Framework 1.12。

太奇怪了。我没有使用模块。只是控制器和动作。

我的控制器文件名为MyCCController.php,“ CC”为大写。

我在该控制器文件中的操作是 MyAAAction,'AA'是大写的。

我尝试了url http://localhost:8003/Mycc/myAA。它显示错误-“找不到页面”。我用谷歌搜索,看到有人说动作名称必须是小写。因此,我将“ MyAAAction”更改为“ myaaAction”。.phtml文件是sitll'views \ scripts \ MyCC \ MyAA.phtml'。它不在乎大写或小写。

然后我访问了url http://localhost:8003/MyCC/myaa,它仍然显示“找不到页面”。

我更改了网址http://localhost:8003/Mycc/myaa,``CC''变成了``cc''。

所以我的问题是,是否有任何文章阐述MVC URL区分大小写的规则?

或者谁可以给我有关控制器,操作,*。phtml文件或其他相关名称的规则。

如果我需要动作名称为camelCase,如何实现呢?

php zend-framework autoloader zend-framework-routing

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

我可以执行不加载模板的操作吗?

我在这里得到了这个问题的答案,但现在我有另一个问题\问题.

我的模块中有一个subnav栏,通过帮助器从视图部分创建.这是module.config.php中的配置:

'navigation' => array(
    'default' => array(
        array(
            'label' => 'Search',
            'route' => 'mymodule\search',
        ),
        array(
            'label' => 'Log Off',
            'route' => 'logout',
        ),
    ),
),
Run Code Online (Sandbox Code Playgroud)

我有一个带有2个动作的LoginController:登录和注销.登录后,我希望用户单击注销按钮,重定向到登录页面并清除其会话.

现在,如果我有登录和注销操作,我需要每个模板.这对于注销操作似乎是不必要的 - 我不希望为此操作加载另一个模板.

这是我的路由配置:

'login' => array(
        'type' => 'Zend\Mvc\Router\Http\Literal',
        'options' => array(
                'route' => '/login',
                'defaults' => array(
                        '__NAMESPACE__' => 'Application\Controller',
                        'controller' => 'Application\Controller\Login',
                        'action' => 'login',
                ),
        ),
),
'logout' => array(
        'type' => 'Zend\Mvc\Router\Http\Literal',
        'options' => array(
                'route' => '/login',
                'defaults' => array(
                        '__NAMESPACE__' => 'Application\Controller',
                        'controller' …
Run Code Online (Sandbox Code Playgroud)

php zend-framework2 zend-framework-routing

0
推荐指数
1
解决办法
64
查看次数