Cakephp 如何连接以自定义元素开头的管线?

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格式的,而只是普通的路径组件

我想在控制器/操作之前放置一个命名参数,以及之后的所有其他内容

e、 g:

我不在乎URL的其余部分在
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'];