如何路由到 cakePHP 中的特定方法?
How to route to a specific method in cakePHP?
我的路线:
Router::connect('/', array('controller' => 'users', 'action' => 'homepage'));
Router::connect('/admin', array('controller' => 'users', 'action' => 'dashboard', 'admin' => true));
我的控制器
class BrandsController extends AppController {
/**
* Components
*
* @var array
*/
public $components = array('Paginator', 'Session', 'Flash');
var $paginate = array('limit' => 100);
/**
* admin_index method
*
* @return void
*/
public function admin_index()
{
index method
}
public function admin_searches()
{
searches method
}
我的link
<?php echo Router::url(array('controller' => 'brands', 'action' => 'searches')); ?>
我有一个 admin_searches.ctp 文件,其中也包含 hello world 文本。
问题是:当我有一个 href link 作为,
<a href="<?php echo Router::url(array('controller' => 'brands','action' => 'admin_index')); ?>">Brands List</a>
它工作正常并显示索引页。现在,当我想显示搜索页面时 "admin_searches,ctp" 它不会。我如何在 link 中路由或修改路由文件,以便当我调用上面的 link 时它会在我的控制器 class
中调用搜索方法
假设您的 admin_searches 操作在您的 BrandsController 中,您应该像这样在视图中打印 links:
<?= $this->Html->link('admin searches',['controller' => 'brands', 'action'=>'admin_searches']); ?>
它也会为您编写 <a>
标签。我只是猜到,您可能不得不分出控制器和动作名称。但它是使用 HTML helper 生成 links
的方法
重写 url 以映射到您的操作
它在文档中非常简单明了。在您的 routes.php 文件中添加如下内容:
Router::connect(
'/brands/searches',
array('controller' => 'brands', 'action' => 'admin_searches')
);
现在 /brands/searches 将转到您的品牌控制器中的 admin_searches 操作
https://book.cakephp.org/2.0/en/development/routing.html#connecting-routes
更新
你告诉我生成的 link 是 /magnus_backend/admin/brands/searches
有几种方法可以路由到它。我可能会考虑重写基础 url 但这应该可行
Router::connect(
'/magnus_backend/admin/brands/searches',
array('controller' => 'brands', 'action' => 'admin_searches')
);
这是一个身份验证问题。每次我尝试创建一个新文件时,例如:admin_search 和一个名为 admin_search 的控制器方法,它会回显 "you are not permitted to acess this location." 因此,为了解决这个问题,我必须在 beforeFilter() 中包含一个方法的身份验证;
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('admin_searches');
}
我的路线:
Router::connect('/', array('controller' => 'users', 'action' => 'homepage'));
Router::connect('/admin', array('controller' => 'users', 'action' => 'dashboard', 'admin' => true));
我的控制器
class BrandsController extends AppController {
/**
* Components
*
* @var array
*/
public $components = array('Paginator', 'Session', 'Flash');
var $paginate = array('limit' => 100);
/**
* admin_index method
*
* @return void
*/
public function admin_index()
{
index method
}
public function admin_searches()
{
searches method
}
我的link
<?php echo Router::url(array('controller' => 'brands', 'action' => 'searches')); ?>
我有一个 admin_searches.ctp 文件,其中也包含 hello world 文本。
问题是:当我有一个 href link 作为,
<a href="<?php echo Router::url(array('controller' => 'brands','action' => 'admin_index')); ?>">Brands List</a>
它工作正常并显示索引页。现在,当我想显示搜索页面时 "admin_searches,ctp" 它不会。我如何在 link 中路由或修改路由文件,以便当我调用上面的 link 时它会在我的控制器 class
中调用搜索方法假设您的 admin_searches 操作在您的 BrandsController 中,您应该像这样在视图中打印 links:
<?= $this->Html->link('admin searches',['controller' => 'brands', 'action'=>'admin_searches']); ?>
它也会为您编写 <a>
标签。我只是猜到,您可能不得不分出控制器和动作名称。但它是使用 HTML helper 生成 links
重写 url 以映射到您的操作
它在文档中非常简单明了。在您的 routes.php 文件中添加如下内容:
Router::connect(
'/brands/searches',
array('controller' => 'brands', 'action' => 'admin_searches')
);
现在 /brands/searches 将转到您的品牌控制器中的 admin_searches 操作
https://book.cakephp.org/2.0/en/development/routing.html#connecting-routes
更新
你告诉我生成的 link 是 /magnus_backend/admin/brands/searches
有几种方法可以路由到它。我可能会考虑重写基础 url 但这应该可行
Router::connect(
'/magnus_backend/admin/brands/searches',
array('controller' => 'brands', 'action' => 'admin_searches')
);
这是一个身份验证问题。每次我尝试创建一个新文件时,例如:admin_search 和一个名为 admin_search 的控制器方法,它会回显 "you are not permitted to acess this location." 因此,为了解决这个问题,我必须在 beforeFilter() 中包含一个方法的身份验证;
public function beforeFilter() {
parent::beforeFilter();
$this->Auth->allow('admin_searches');
}