Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/257.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何允许除第1部分和第2部分之外的所有其他部分?_Php_Zend Framework_Zend Route - Fatal编程技术网

Php 如何允许除第1部分和第2部分之外的所有其他部分?

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

这使我可以轻松地获取动态输入变量,而不是像/en/etc这样的静态前缀,但问题是所有控制器都被阻塞了。一切都进入索引

问:我怎么能告诉这个规则允许像现在这样的everting,但不跟踪它是否包含和

跟进: 通常,我总是相信我们可以,所以,我们可以这样做,在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'