我正在使用CakePHP 2.5.x并且使用默认路由工作正常。现在,我想为公司名称参数添加前缀,该参数将根据用户登录而变化。
例如,目前它以这种方式工作
http://localhost/Pages/view
http://localhost/Pages/add
我希望以这种方式工作
http://localhost/acme/Pages/view
http://localhost/acme/Pages/add
我已经配置了routes.php配置文件,以使用以下行来处理上面的实际路由
/**
* Catch urls like http://www.domain.com/<company>/<controller>/<action>/<parameters>
*/
Router::connect(
'/:company/:controller/:action/*',
array (),
array (
'company' => '[a-zA-Z0-9]+' // regular expression match for the company parameter
)
);
/**
* Catch urls like http://www.domain.com/<company>/<controller>/<action>
*/
Router::connect(
'/:company/:controller/:action',
array (),
array (
'company' => '[a-zA-Z0-9]+' // regular expression match for the company parameter
)
);
/**
* Catch urls like http://www.domain.com/<company>/<controller>/
*/
Router::connect(
'/:company/:controller',
array (
'action' => 'index'
),
array (
'company' => '[a-zA-Z0-9]+' // regular expression match for the company parameter
)
);
/**
* Catch urls like http://www.domain.com/<company>/
*/
Router::connect(
'/:company',
array(
'controller' => 'Users', // default controller
'action' => 'index' // default action
),
array (
'company' => '[a-zA-Z0-9]+' // regular expression match for the company parameter
)
);
我遇到的问题是,在我的应用程序的许多地方,我使用了echo Router::url('')
,现在所有这些链接都需要更新。是否有一些通用的方法可以确保一旦用户登录,为该用户生成的所有链接都将获得相关的公司名称和前缀?
非常感谢帮助。
答案 0 :(得分:1)
您要查找的是persist
选项,它定义了在生成新网址时应自动包含当前网址中存在的哪些参数。
示例:强>
Router::connect(
'/:company/:controller/:action/*',
array (),
array (
'company' => '[a-zA-Z0-9]+',
'persist' => array(
'company'
)
)
);
如果当前网址为/acme/pages/view
,请执行以下调用
Router::url(array(
'controller' => 'pages',
'action' => 'add'
));
会生成包含公司名称的网址,例如
/acme/pages/add
同样,如果公司名称在当前网址中不存在,则不会包含公司名称,即在/pages/view
生成的网址
/pages/add
如果您需要在发布重定向之前包含公司名称,以便公司名称出现在URL中,您只需将其添加到当前请求中,例如在控制器中
$this->request->params['company'] = 'acme';
从那里生成的URL将包含公司名称。
另请参阅 http://book.cakephp.org/2.0/en/development/routing.html#Router::connect
答案 1 :(得分:0)
在 beforeFilter 方法中的 AppController.php 中计算$ current_company变量:
public function beforeFilter() {
$current_company = 'acme'; //just assigning a value, you can determine this variable in any way
$this->set(compact('current_company'));
}
然后,如果你的观点,在链接中声明公司价值,如:
<?php echo $this->Html->link(__('Link Name'),array('company' => $current_company,'controller' => 'YOUR_CONTOLLER', 'action' => 'YOUR_ACTION'), array('css' => 'my_style')); ?>
或
<a href="<?php echo $this->Html->url(array('company' => $current_company,'controller' => 'YOUR_CONTOLLER', 'action' => 'YOUR_ACTION')) ?>" class="my_style" id ="">Link Name</a>
或
echo Router::url(array('company' => $current_company,'controller' => 'YOUR_CONTOLLER', 'action' => 'YOUR_ACTION'))
Cake应该自动将变量添加为/ acme / YOUR_CONTOLLER / YOUR_ACTION等前缀