CakePHP 创建新页面

Posted

技术标签:

【中文标题】CakePHP 创建新页面【英文标题】:CakePHP create new page 【发布时间】:2016-02-02 08:41:47 【问题描述】:

我想在 Cakephp 2 中创建新页面。我添加了两个文件:

app/controllers/productsimport_controller.php

其中包含:

<?php
class ProductsimportController extends AppController
       
    function admin_index()
    

    

    function isAuthorized()
    
        return true;
    

app/views/productsimport/admin_index.ctp

其中包含:

<h2>Hello!</h2>

但我总是看到的不是这一页,而是我之前所在的上一页。例如,如果我在/admin/users,如果我转到/admin/productsimport,我仍然会看到/admin/users/。或者有时404 page,但不是我想要的。

可能是我忘了添加一些东西来让它工作吗?

【问题讨论】:

你的路线是什么样的?您是否将admin 设置为路由前缀? 路由中只有一行包含/admin:Router::connect('/admin', array('controller' =&gt; 'users', 'action' =&gt; 'login', 'admin' =&gt; true)); 【参考方案1】:

到控制器方法的默认路由是/productsimport/*,所以要访问你想要的页面,url是/productsimport/admin_index

当你尝试输入/admin/productsimport 时,Cake 的作用是检查AdminsController 中的productsImport() 方法,它不存在,所以它呈现索引。

您可以在路由器中更改此行为

【讨论】:

最奇怪的是没有AdminsControllerAdminController/admin/* 的其他部分通过它们自己的控制器工作,例如 ContactsController 和方法 admin_index() 无论如何Router::connect('/admin/productsimport/', array('controller' => 'productsimport', 'action' => 'admin_index'));在路由器中应该可以工作【参考方案2】:

您的问题似乎是路由问题,听起来您没有为/admin/productsimport 设置路由。

如果您希望控制器中所有以admin_ 为前缀的操作都具有route prefix admin,那么您需要在app/Config/core.php 中启用路由前缀:-

Configure::write('Routing.prefixes', array('admin'));

这将更改任何以 action_ 为前缀的控制器操作的路由,例如:admin_edit/admin/controller/edit

否则,您将需要为要以这种方式访问​​的每个控制器操作设置路由。因此,对于您的特定示例,您需要在app/Config/routes.php:-

Router::connect('/admin/productsimport/', 
    array('controller' => 'productsimport', 'action' => 'admin_index')
);

admin 路由添加前缀意味着这将是不必要的。

【讨论】:

我在里面有这个app/config/core.php:Configure::write('Routing.admin', 'admin');。我认为这就是为什么/admin/contacts 将在ContactsController 中使用方法admin_index() 我将Router::connect('/admin/productsimport/', array('controller' =&gt; 'productsimport', 'action' =&gt; 'admin_index')); 添加到app/Config/routes.php,现在/admin/productsimport/ 出现错误:Error: ProductsimportController::admin_index() cannot be accessed directly. 我不熟悉'Routing.admin' 配置设置,这可能特定于您的应用程序。路由前缀应配置为'Routing.prefixes',如我的回答所示。您可能需要检查 'Routing.admin' 的使用位置,以查看这是否改变了 admin 路由的处理方式。否则,您应该考虑使用描述的前缀方法。 @mrVG 没问题。如果这有助于您解决问题,请投票和/或将其标记为正确答案,以便将来可能会帮助其他遇到类似问题的人。 :-)

以上是关于CakePHP 创建新页面的主要内容,如果未能解决你的问题,请参考以下文章

使用 Cakephp-jwt-auth [CakePHP 3] 过期后颁发新令牌

如何为现有的 CakePHP (2) 项目添加新的 url 路由

CakePHP 3 新实体保存失败且没有错误

在 CakePHP 中保存新的关联记录

cakephp 2.0 中的忘记密码功能

具有不同表名和插件的 Cakephp 夹具