如何在zf2中获取与页面请求相关的各种参数?与发布/获取参数一样,正在访问的路由,发送的标头和上载的文件.
我是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
?有人可以用小例解释吗?
在现有的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的单一路径:
好的,我设法真正接近我正在尝试使用此代码:
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) 我想知道如何在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) 我在我的控制器中有以下重定向脚本(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
我有一个表单,我正在尝试设置该操作.我想使用我在引导程序中创建的路径,在我的表单文件(扩展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) 我有两个用户友好的URL问题.
我有一个路由器设置如下:
http://www.example.com/course/view-batch/course_id/19
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的用户评论
http://www.example.com/course/view-reviews/course_id/19
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) 使用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都迷路了......
任何人?
我在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
我有一个控制器和操作,我通过自定义URL访问.尽管在默认位置仍可访问原始路线
zend.com/controller/action
Run Code Online (Sandbox Code Playgroud)
当用户尝试访问此URL时,如何更改此设置以模拟"找不到页面"?可能吗?
zend-route ×10
php ×8
zend-router ×2
file-upload ×1
routes ×1
routing ×1
url-routing ×1
zend-form ×1
zend-rest ×1