Cakephp 如何连接以自定义元素开头的管线?
我想在控制器/操作之前放置一个命名参数,以及之后的所有其他内容 e、 g: 我不在乎URL的其余部分在Cakephp 如何连接以自定义元素开头的管线?,cakephp,cakephp-2.3,Cakephp,Cakephp 2.3,我想在控制器/操作之前放置一个命名参数,以及之后的所有其他内容 e、 g: 我不在乎URL的其余部分在named\u参数之后如何构造。我只想把参数放在前面:) 而且,我还需要在前面的工作中创建没有命名参数的标准URL e、 g: 为了简单起见,仅当命名参数以foo\uu e、 g: 有可能匹配吗?如果是,怎么做?烹饪书中都有描述,请参阅 看起来您不是在谈论命名参数(从CakePHP 3.0开始删除,所以最好现在就停止使用它们),因为它们是name:value格式的,而只是普通的路径组件
named\u参数之后如何构造。我只想把参数放在前面:)
而且,我还需要在前面的工作中创建没有命名参数的标准URL
e、 g:
为了简单起见,仅当命名参数以foo\uu
e、 g:
有可能匹配吗?如果是,怎么做?烹饪书中都有描述,请参阅
看起来您不是在谈论命名参数(从CakePHP 3.0开始删除,所以最好现在就停止使用它们),因为它们是name:value
格式的,而只是普通的路径组件
您可以轻松定义自己的route元素,并使用regex匹配选项确保路由仅连接到元素以foo\uuu
开头的URL。使用:controller
和:action
元素,您的路由将连接到与不带foo
路径组件的路由相同的控制器/操作
把这些路线放在其他路线之前,这样它们就优先了,你应该是好的
$options = array(
'store' => 'foo_[^\/]+', // matches everything that starts with `foo_`
'persist' => array('store')
);
/**
* Connects:
*
* /foo_storename/controller/action
* /foo_storename/controller/action/whatever/etc...
* /foo_storename/controller/action?bar=baz&etc...
*/
Router::connect(
'/:store/:controller/:action/*',
array(),
$options
);
/**
* Connects:
*
* /foo_storename/controller
* /foo_storename/controller?bar=baz&etc...
*/
Router::connect(
'/:store/:controller',
array('action' => 'index'),
$options
);
/**
* Connects:
*
* /foo_storename
* /foo_storename?bar=baz&etc...
*/
Router::connect(
'/:store',
array('controller' => 'index', 'action' => 'index'),
$options
);
存储
然后可以在控制器中的请求对象上访问,神奇地作为请求对象的属性:
$this->request->store;
或者显式地在params
属性中:
$this->request->params['store'];
用抽象的例子很难确定你想要达到什么目的。你能不能提供更多的细节,比如在哪里使用,为什么a不合适?@MartinBean我们正在设计一个有多个商店的电子商务网站。我想使用前面的命名参数来定义作用域。例如:domain.com/store1/products/add domain.com/store2/products/view如果有存储范围,为什么需要它在没有前缀的情况下工作?如果我请求一个没有前缀的操作,会发生什么;那么它加载的是哪家商店的数据呢?如果你曾经接受过一个答案,你可能会得到更多的帮助,人们都喜欢。在将来的问题上,你要记住这一点。ps,请经常提到你的CakePHP版本,我们这里的透视仪太少了!
$options = array(
'store' => 'foo_[^\/]+', // matches everything that starts with `foo_`
'persist' => array('store')
);
/**
* Connects:
*
* /foo_storename/controller/action
* /foo_storename/controller/action/whatever/etc...
* /foo_storename/controller/action?bar=baz&etc...
*/
Router::connect(
'/:store/:controller/:action/*',
array(),
$options
);
/**
* Connects:
*
* /foo_storename/controller
* /foo_storename/controller?bar=baz&etc...
*/
Router::connect(
'/:store/:controller',
array('action' => 'index'),
$options
);
/**
* Connects:
*
* /foo_storename
* /foo_storename?bar=baz&etc...
*/
Router::connect(
'/:store',
array('controller' => 'index', 'action' => 'index'),
$options
);
$this->request->store;
$this->request->params['store'];