【问题标题】:How to route to a specific method in cakePHP?如何路由到 cakePHP 中的特定方法?
【发布时间】:2017-04-12 08:50:25
【问题描述】:

我的路线:

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
}     

我的链接

<?php echo Router::url(array('controller' => 'brands', 'action' => 'searches')); ?>

我有一个 admin_searches.ctp 文件,其中也有 hello world 文本。

问题是:当我有一个href链接时,

<a href="<?php echo Router::url(array('controller' => 'brands','action' => 'admin_index')); ?>">Brands List</a> 

它工作正常并显示索引页面。现在,当我想显示搜索页面“admin_searches,ctp”时,它不会。我如何在链接中路由或修改路由文件,以便当我调用上述链接时,它会在我的控制器类中调用搜索方法

【问题讨论】:

    标签: cakephp cakephp-3.0 cakephp-2.3 cakephp-routing


    【解决方案1】:

    假设您的 admin_searches 操作在您的 BrandsController 中,您应该像这样在视图中打印链接:

    <?= $this->Html->link('admin searches',['controller' => 'brands', 'action'=>'admin_searches']); ?>
    

    它也会为您编写&lt;a&gt; 标签。你可能不得不分出控制器和动作名称,我只是猜到了。但它是使用HTML助手生成链接的方式

    重写网址以映射到您的操作

    它在文档中非常直截了当。在你的 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

    更新

    你告诉我生成的链接是/magnus_backend/admin/brands/searches 有几种方法可以路由到它。我可能会考虑重写基本网址,但这应该可行

    Router::connect(
        '/magnus_backend/admin/brands/searches',
        array('controller' => 'brands', 'action' => 'admin_searches')
    );
    

    【讨论】:

    • 如何使用此链接返回视图。例如,我有一个名为 admin_searches.ctp 的视图页面。因此,当我单击此链接时,我将如何返回视图。我实际上是在 laravel 上工作的,这是我在工作中遇到的一个问题,我必须解决它,但我在蛋糕 php 方面没有任何线索或经验.. 提前致谢
    • 你能告诉我你想使用什么网址以及你想访问品牌控制器中的什么操作吗?您将在浏览器的导航栏中看到的实际网址
    • 另外,当我点击上面的链接时,它会将我重定向到 admin_index 页面
    • 我只想要一个像你给我的网址,它将在我的控制器中调用名为 admin_searches() 的方法,如我的代码中所示。同样的事情适用于控制器中的索引、视图、编辑方法。我刚刚添加了一个名为 admin_searches 的新方法,现在我希望将它包含在您给我的链接中,然后将显示一个名为 admin_searches.ctp 的页面
    • 我不知道您指的是哪个链接。正常的蛋糕约定是将动作命名为与视图相同的名称。因此,如果您的 url 使用与控制器中相同的操作名称,并且与视图相同的名称,它应该都能很好地呈现
    【解决方案2】:

    这是一个身份验证问题。每次我尝试创建一个新文件时,例如:admin_search 和一个名为 admin_search 的控制器方法,它都会回显“您不允许访问此位置”。因此,为了克服这个问题,我必须在 beforeFilter() 中包含方法的身份验证;

    public function beforeFilter() {
                parent::beforeFilter();
                $this->Auth->allow('admin_searches');
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-21
      • 2015-12-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 2020-05-23
      • 1970-01-01
      相关资源
      最近更新 更多