加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

zend-framework – 获取Zend Framework URL参数

发布时间:2020-12-13 16:48:19 所属栏目:PHP教程 来源:网络整理
导读:我正在构建我的第一个Zend Framework应用程序,我想找出从URL获取用户参数的最佳方法. 我有一些控制器,它们具有索引,添加,编辑和删除操作方法.索引操作可以采用页面参数,编辑和删除操作可以采用id参数. Examples http://example.com/somecontroller/index/pag
我正在构建我的第一个Zend Framework应用程序,我想找出从URL获取用户参数的最佳方法.

我有一些控制器,它们具有索引,添加,编辑和删除操作方法.索引操作可以采用页面参数,编辑和删除操作可以采用id参数.

Examples
    http://example.com/somecontroller/index/page/1
    http://example.com/someController/edit/id/1
    http://example.com/otherController/delete/id/1

到目前为止,我在动作方法中获取了这些参数,如下所示:

class somecontroller extends Zend_Controller_Action
{
    public function indexAction()
    {
        $page = $this->getRequest->getParam('page');
    }
}

但是,一位同事告诉我使用Zend_Controller_Router_Rewrite的更优雅的解决方案如下:

$router = Zend_Controller_Front::getInstance()->getRouter();

$route = new Zend_Controller_Router_Route(
                        'somecontroller/index/:page',array(
                            'controller' => 'somecontroller','action'    => 'index'
                        ),array(
                            'page' => 'd+'
                        )
);

$router->addRoute($route);

这意味着对于每个控制器,我需要添加至少三个路径:

>一个用于带有:page参数的“index”操作
>一个用于带有:id参数的“编辑”操作
>一个用于带有:id参数的“删除”操作

请参阅下面的代码作为示例.这些是一个控制器只有3个基本动作方法的路径,想象有10个或更多控制器……我无法想象这是最好的解决方案.我看到的唯一好处是参数键已命名,因此可以从URL中省略(somecontroller / index / page / 1变为somecontroller / index / 1)

// Route for somecontroller::indexAction()
$route = new Zend_Controller_Router_Route(
                        'somecontroller/index/:page','action'     => 'index'
                        ),array(
                            'page' => 'd+'
                        )
);

$router->addRoute($route);

// Route for somecontroller::editAction()
$route = new Zend_Controller_Router_Route(
                        'somecontroller/edit/:id','action'     => 'edit'
                        ),array(
                            'id' => 'd+'
                        )

$router->addRoute($route);

// Route for somecontroller::deleteAction()
$route = new Zend_Controller_Router_Route(
                        'somecontroller/delete/:id','action'     => 'delete'
                        ),array(
                            'id' => 'd+'
                        )

$router->addRoute($route);

解决方法

我倾向于这样看待它:

>确定处理要求.

每个“行动”需要什么?编辑操作和删除操作可能需要:id参数.添加操作和列表操作可能不会.然后,这些控制器/操作使用参数并进行处理.

注意:您可以编写这些控制器/操作,而无需参考将访问者带到那里的URL.这些行动只是希望将他们的参数传递给他们.
>决定(!)你想要什么网址.

一般来说,我发现url的(/:module /):controller /:action部分工作正常(除了顶级的相对静态页面,比如/ about,我经常将这些动作放在一个IndexController上(或者一个StaticController)并且必须在url中包含/ index前缀.

因此,要处理帖子,您可能需要以下网址:

> / post – 列出所有帖子,可能有一些分页
> / post /:id – 显示特定帖子
> / post /:id / edit – 编辑特定帖子
> / post /:id / delete – 删除特定帖子
> / post / add – 添加帖子

或者,您可能需要:

> / post / list – 列出所有帖子,可能有一些分页
> / post / display /:id – 显示特定帖子
> / post / edit /:id – 编辑特定帖子
> / post / delete /:id – 删除特定帖子
> / post / add – 添加帖子

或任何其他网址方案.关键是,您决定要公开的网址.
>创建路线……

…将这些网址映射到控制器/操作. [并确保无论何时渲染它们,都要使用url()view-helper和route-name,这样路由更改不需要更改操作或视图中的下游代码.

你最终用这种方式写了更多的路线吗?是的,我发现我做到了.但是,对我来说,好处是我可以决定我的网址.我没有坚持Zend默认值.

但是,和大多数事情一样,YMMV.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读