Php 如何允许除第1部分和第2部分之外的所有其他部分?
这使我可以轻松地获取动态输入变量,而不是像/en/etc这样的静态前缀,但问题是所有控制器都被阻塞了。一切都进入索引 问:我怎么能告诉这个规则允许像现在这样的everting,但不跟踪它是否包含和 跟进: 通常,我总是相信我们可以,所以,我们可以这样做,在dynamic1不与我的其他静态控制器交互的情况下:Php 如何允许除第1部分和第2部分之外的所有其他部分?,php,zend-framework,zend-route,Php,Zend Framework,Zend Route,这使我可以轻松地获取动态输入变量,而不是像/en/etc这样的静态前缀,但问题是所有控制器都被阻塞了。一切都进入索引 问:我怎么能告诉这个规则允许像现在这样的everting,但不跟踪它是否包含和 跟进: 通常,我总是相信我们可以,所以,我们可以这样做,在dynamic1不与我的其他静态控制器交互的情况下: // http://site/yeswecan/blabla // variable0 = yeswecan // variable1 = blabla $dynamic1
// http://site/yeswecan/blabla
// variable0 = yeswecan
// variable1 = blabla
$dynamic1 = new Zend_Controller_Router_Route(
'/:variable0/:variable1',
array(
'controller' => 'index',
'action' => 'index'),
array(
'variable0' => '^[a-zA-Z]*$',
'variable1' => '^[a-z0-9_]*$',
)
);
// http://site/ajax/whatever...
// solves it
$dynamic2 = new Zend_Controller_Router_Route(
'/ajax/:variable0',
array(
'controller' => 'ajax',
'action' => ''
),
array(
'variable0' => '^[a-zA-Z0-9_]*$',
)
);
// http://site/order/whatever...
// solves it
$dynamic3 = new Zend_Controller_Router_Route(
'/order/:variable0',
array(
'controller' => 'order',
'action' => ''),
array(
'variable0' => '^[a-zA-Z0-9_]*$',
)
);
注:
- 例如,控制器仍然出现故障 总是转到/ajax/index,我希望将其作为/ajax/user插入值发送
如何通过保留$dynamic1来修复$dynamic2和$dynamic3???我认为Zend不支持使用“负”匹配条件。幸运的是,正则表达式可以使用负lookaheads或lookbehind: 例如,以下正则表达式:
(?!foo$|bar$)(?<!^foo|^bar)$
(?!foo$| bar$)(?)?
告诉正则表达式解析器排除完全是foo
或bar
的匹配项
fbar
,bfoo
和fbarf
仍将匹配
注意:在上面的正则表达式中,[a-zA-Z0-9\
与\w
完全相同。我认为Zend不支持使用“负”匹配条件。幸运的是,正则表达式不支持使用负lookahead或lookbehind:
例如,以下正则表达式:
(?!foo$|bar$)(?<!^foo|^bar)$
(?!foo$| bar$)(?)?
告诉正则表达式解析器排除完全是foo
或bar
的匹配项
fbar
,bfoo
和fbarf
仍将匹配
注意:在上面的正则表达式中,[a-zA-Z0-9.]
与\w
完全相同。嘿,现在听起来好像您只是希望每个(ajax)操作都转到自己的操作。这是您的意思吗?如果是,我想您可以使用以下方法:
$dynamic2 = new Zend_Controller_Router_Route(
'/ajax/:action',
array(
'controller' => 'ajax'
),
array(
'action' => '^[a-zA-Z0-9_]*$',
)
);
您还可以为与regexp不匹配的其余ajax调用添加一个更通用的调用:
$dynamic1_and_a_half = new Zend_Controller_Router_Route(
'/ajax/:variable',
array(
'controller' => 'ajax',
'action' => 'index'
)
);
如果这不是你的意思,你能不能也发布你的控制器,以及你想把/ajax/随便什么调用放到哪里?嘿,现在听起来好像你只想让每个(ajax)动作都转到它自己的动作。这是你的意思吗?如果是,我想你可以用这个:
$dynamic2 = new Zend_Controller_Router_Route(
'/ajax/:action',
array(
'controller' => 'ajax'
),
array(
'action' => '^[a-zA-Z0-9_]*$',
)
);
您还可以为与regexp不匹配的其余ajax调用添加一个更通用的调用:
$dynamic1_and_a_half = new Zend_Controller_Router_Route(
'/ajax/:variable',
array(
'controller' => 'ajax',
'action' => 'index'
)
);
如果这不是你的意思,你能不能也发布你的控制器,以及你想把/ajax/which调用放到哪里?是的,但是你有静态路由器,这是动态部分。还有一种味道是两者的混合。在这条规则中,我想说忽略任何包含/gurunetcoder或/netcoder的东西ve静态路由器,这是动态部分。还有另一种味道,它包含了两者的混合。在这条规则中,我想说忽略任何包含/gurunetcoder或/netcoder的东西,例如:但是我如何做一个虚拟动作,忽略它,并将其保持为:variable\u reserved?例如:=?Where:variable\u reserved==阿拉伯语,以便以后在这些cont中使用好吧,为此,您可以使用原始的$dynamic2
,将所有内容重定向到同一个操作,然后使用$this->getRequest()->getParam('variable0')
。所以在这个例子中,我想你会使用'/:variable\u reserved/ajax/:action'
。但是我如何做一个虚拟动作,忽略它,并将其保持为:variable\u reserved?例子:=?Where:variable\u reserved==阿拉伯语,以便以后在这些控制器中使用。好吧,你可以使用你原来的$dynamic2
,重定向将所有内容都添加到相同的操作中,然后使用$this->getRequest()->getParam('variable0')
。因此,在本例中,我想您将使用'/:variable\u reserved/ajax/:action'
。