标签: zend-route

如何在Zend Framework 2中访问路由,发布,获取等参数

如何在zf2中获取与页面请求相关的各种参数?与发布/获取参数一样,正在访问的路由,发送的标头和上载的文件.

php file-upload zend-route zend-framework2

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

什么是zend框架2中的'may_terminate'?

我是Zend的初学者.我may_terminate在模块路由配置中看到过.我不明白它的用途.根据ZF2官方文档,

the option “may_terminate” hints to the router that no other 
segments will follow it.
Run Code Online (Sandbox Code Playgroud)

我仍然没有得到的含义no other segments will follow it.这是什么it?有人可以用小例解释吗?

php zend-route zend-router zend-framework2

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

使用前缀和Zend_Controller_Router_Route

在现有的Zend Framework网站上,只有很少的控制器,没有模块,我需要在默认路由中添加一些前缀.

例如,我目前有:

/products
/products/id/1
/training
/commonpage
Run Code Online (Sandbox Code Playgroud)

我想添加一个产品线级别,而不是在x模块中复制我的控制器(我只需要在我的控制器中请求正确的产品线_getParam).

所以我的新路径将是:

/line1/products
/line1/products/id/1
/line2/training
/commonpage
Run Code Online (Sandbox Code Playgroud)

到目前为止我尝试的是这条路线(位于我的Bootstrap文件中):

protected function _initRoutes()
{
    $router = Zend_Controller_Front::getInstance()->getRouter();
    $router->addRoute('productLineRoute', new Zend_Controller_Router_Route(
        ':line/:controller/:action',
        array('module' => 'default'),
        array('line' => '(' . implode('|', Zend_Registry::getInstance()->constants->lines) . ')')
    ));
}
Run Code Online (Sandbox Code Playgroud)

但没有任何成功(它给了我一个404).如何在这些条件下构建匹配所有uri的单一路径:

  • uri的前缀与我的产品系列数组中的值匹配
  • 只有当允许以"产品线方式"访问所请求的控制器时,该路由才有效 - 通过包含我的控制器名称的数组

UPDATE

好的,我设法真正接近我正在尝试使用此代码:

protected function _initConstants()
{
    $registry = Zend_Registry::getInstance();
    $registry->constants = new Zend_Config( $this->getApplication()->getOption('constants') );
    $uri = ltrim($_SERVER['REQUEST_URI'], '/');
    $product_line = substr($uri, 0, strpos($uri, '/'));
    if(!empty($product_line) && in_array($product_line, Zend_Registry::getInstance()->constants->lines->toArray()) &&
       $product_line != Zend_Registry::getInstance()->constants->lines->get(0)) {
        $registry->product_line …
Run Code Online (Sandbox Code Playgroud)

php zend-framework zend-route

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

将url参数转换为占位符

我想知道如何在ZF2中翻译一个有参数的网址.

例如:

/{:language_link-schools-:city_link}
Run Code Online (Sandbox Code Playgroud)

我不这样做的原因:

/:language_link-{schools}-:city_link
Run Code Online (Sandbox Code Playgroud)

是因为在某些语言中,例如西班牙语,单词的顺序会发生变化.

我正在使用PhpArray,当我翻译它时,参数不会被替换,因此url呈现为​​(例如西班牙语):

/:language_link-escuela-:city_link
Run Code Online (Sandbox Code Playgroud)

而不是预期的行为:

/ingles-escuela-miami
Run Code Online (Sandbox Code Playgroud)

编辑:

参数是 :language_link:city_link

因此,我们的想法是,在一种语言中,呈现的URL可能是:

 /:language_link-schools-:city_link 
Run Code Online (Sandbox Code Playgroud)

用另一种语言可能是:

/:language_link-:city_link-school
Run Code Online (Sandbox Code Playgroud)

与您在翻译语句时执行的操作类似:

sprintf($this->translate('My name is %s'), $name) ;
Run Code Online (Sandbox Code Playgroud)

php zend-route zend-router zend-framework2

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

在zend framework v2中的重定向中设置url参数

我在我的控制器中有以下重定向脚本(Zend Framework 2)

return $this->redirect()->toRoute('default', array(
                        'controller' => 'admin',
                        'action' =>  'index'
));
Run Code Online (Sandbox Code Playgroud)

目前正在重定向到 localhost/zf2/public/admin/index

如何使用额外参数重定向?

喜欢:

localhost/zf2/public/admin/index/update/1

要么 localhost/zf2/public/admin/index/page/2

我试过这个:

return $this->redirect()->toRoute('default', array(
                        'controller' => 'admin',
                        'action' =>  'index'
                            'param' => 'updated/1'
                        ));
Run Code Online (Sandbox Code Playgroud)

但被重定向到 localhost/ttacounting/public/admin/index/updated%2F1

routing url-routing zend-route zend-framework2

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

Zend Form SetAction使用命名路由

我有一个表单,我正在尝试设置该操作.我想使用我在引导程序中创建的路径,在我的表单文件(扩展Zend_Form)中而不是在控制器或视图中声明操作.通常当我想使用路线时,我会做类似的事情

$this->url(array(), 'route-name');
Run Code Online (Sandbox Code Playgroud)

在视图中,或

$this->_helper->url(array(), 'route-name');
Run Code Online (Sandbox Code Playgroud)

在控制器中.

如何从Zend_Form中调用路由?


编辑:我已经放弃了尝试将路由加载到zend_form.也许在将来的版本中可能有一个功能可以轻松地做到这一点?

我已经为我的表单创建了一个viewScript并在其中设置了路径:在表单init函数中:

$this->setDecorators(array(
    'PrepareElements',
        array(
            'ViewScript', array(
                    'viewScript' => 'forms/formView.phtml'
            ))));
Run Code Online (Sandbox Code Playgroud)

并在视图文件中:

<form method="post" action="<?php echo $this->url(array(), 'route-name'); ?>" enctype="application/x-www-form-urlencoded">
    <?php
        foreach ($this->element->getElements() as $element)
        {
            echo $element;
        }
    ?>
</form>
Run Code Online (Sandbox Code Playgroud)

zend-framework zend-form zend-route

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

Zend Framework - 使用路由和正则表达式设置用户友好的URL

我有两个用户友好的URL问题.

我有一个路由器设置如下:

  • 实际的URL是 http://www.example.com/course/view-batch/course_id/19
  • 我想要一个更友好的URL http://www.example.com/java-training/19

我已经设置了以下路线application.ini:

resources.router.routes.viewbatchcourse.route = "/:title/:course_id/"
resources.router.routes.viewbatchcourse.defaults.controller = course
resources.router.routes.viewbatchcourse.defaults.action = view-batch
resources.router.routes.viewbatchcourse.reqs.course_id = "\d+"
Run Code Online (Sandbox Code Playgroud)

这非常有效.

现在我有一个新页面 - 其中包含Java的用户评论

  • 实际的URL是 http://www.example.com/course/view-reviews/course_id/19
  • 我想要一个更友好的URL http://www.example.com/java-reviews/19

我意识到它不可能,因为已经设置了一条路线来匹配该格式.

所以我在想是否有可能使用正则表达式并检查标题是否包含"评论"然后使用此路线.

我试过这种方法,但它不起作用.而是打开视图批处理页面:

resources.router.routes.viewreviews.type = "Zend_Controller_Router_Route_Regex"
resources.router.routes.viewreviews.route = "/:title/:course_id"
resources.router.routes.viewreviews.defaults.controller = "course"
resources.router.routes.viewreviews.defaults.action = "view-reviews"
resources.router.routes.viewreviews.reqs.course_id = "\d+"
resources.router.routes.viewreviews.reqs.title =  "\breviews\b"
Run Code Online (Sandbox Code Playgroud)

我最接近它的工作是

resources.router.routes.viewreviews.route = "/:title/:course_id"
resources.router.routes.viewreviews.defaults.controller = "course"
resources.router.routes.viewreviews.defaults.action = "view-reviews"
resources.router.routes.viewreviews.reqs.course_id = "\d+"
resources.router.routes.viewreviews.reqs.title =  "reviews"
Run Code Online (Sandbox Code Playgroud)

现在,如果我输入URL http://www.example.com/reviews/19,则会调用view-reviews操作.是否可以 - 检查标题是否包含"评论"一词 - 那么应该调用这条路线?


回到我之前的工作路线http://www.example.com/java-training/19:

resources.router.routes.viewbatchcourse.route = "/:title/:course_id/"
resources.router.routes.viewbatchcourse.defaults.controller …
Run Code Online (Sandbox Code Playgroud)

php zend-framework routes zend-route

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

如何设置Hierarchical Zend Rest Routes?

使用Zend Framework,我试图在以下模式组织的资源上构建REST api的路由:

如何使用Zend_Rest_Route设置它?

以下是我在bootstrap.php文件中为users资源(users /:id)设置路由的方法:

  $this->bootstrap('frontController');
  $frontController = Zend_Controller_Front::getInstance();
  $restRoute = new Zend_Rest_Route($frontController);
  $frontController->getRouter()->addRoute('default', $restRoute);
Run Code Online (Sandbox Code Playgroud)

[据我所知,这是一个捕获所有路由,因此users/324/items/34将导致参数设置为id = 324和items = 34,并且所有内容都将映射到Users(前端模块)模型.从那里我想我可以测试items参数并在get请求中检索用户#324的项目#34.] <===我刚刚检查它并且它似乎不像那样工作:

Acessing/users/234/items/43和

var_dump($this->_getAllParams());
Run Code Online (Sandbox Code Playgroud)

在其余控制器的get动作中产生以下输出:

array(4) {
 ["controller"]=> string(5) "users"
 ["action"]=>  string(3) "get"
 [2]=>  string(5) "items"  ["module"]=>  string(7) "default"]
}
Run Code Online (Sandbox Code Playgroud)

不知怎的,两个ids都迷路了......

任何人?

php zend-framework zend-rest zend-rest-route zend-route

9
推荐指数
2
解决办法
5348
查看次数

Zend_Translate - Zend_Navigation和Routing组合问题!

我在Zend_Navigation,Zend_Translate和所需路由的组合方面遇到了一些困难.

我的站点导航是通过基于XML文件的Zend_Navigation完成的.我现在已经基于Zend_Translate添加了对站点的翻译,并添加到以下更改路由到引导程序:

protected function _initRoutes()

    $config = new Zend_Config($this->getOptions());
    $languages = array_keys($config->languages->toArray());
    $zl = new Zend_Locale();
    $lang = in_array($zl->getLanguage(), $languages)
                  ? $zl->getLanguage() : 'en';

    $zfc = Zend_Controller_Front::getInstance();


    // add language to default route
    $route = new Zend_Controller_Router_Route(
            ':lang/:module/:controller/:action/*',
      array('controller'=>'index',
                'action' => 'index',
                'module'=>'default',
                'lang'=>$lang));

    $router = $zfc->getRouter();
    $router->addRoute('default', $route);
    $zfc->setRouter($router);
Run Code Online (Sandbox Code Playgroud)

然后我用preDispatc方法创建了一个View_Helper:

    $language = $request->getParam('lang','');

 if ($language !== 'en' && $language !== 'da')
     $request->setParam('lang','en');

 $language = $request->getParam('lang');
 if ($language == 'en')
     $locale = 'en_EN';
 else
     $locale = 'da_DK';

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

php zend-framework zend-translate zend-navigation zend-route

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

如何将控制器/操作设置为Page Not Found

我有一个控制器和操作,我通过自定义URL访问.尽管在默认位置仍可访问原始路线

zend.com/controller/action
Run Code Online (Sandbox Code Playgroud)

当用户尝试访问此URL时,如何更改此设置以模拟"找不到页面"?可能吗?

php zend-framework zend-route

9
推荐指数
2
解决办法
1903
查看次数