【问题标题】:CakePHP pages_controller always uses default layoutCakePHP pages_controller 总是使用默认布局
【发布时间】:2014-02-05 06:16:25
【问题描述】:

我有一个要提供的静态页面,因此我在 /views/pages/ 目录中创建了一个 .ctp。问题是它使用了我不想使用的默认布局。我尝试制作自己的 pages_controller 并传递 $layout var,但这不起作用。必须有一种方法告诉 /pages/ 使用另一个 layout.ctp。没有?

【问题讨论】:

    标签: cakephp layout default


    【解决方案1】:

    我遇到了类似的问题,我想我会报告我的解决方案以防其他人面临同样的问题。

    我没有使用页面,但有一个控制器“成员”:

    <?php
    class MembersController extends AppController {
    
        var $name       = 'Members';
        var $helpers    = array('Html','Javascript','Form','Time');
        var $uses       = array();  
    
        function index() {
            // Works, will load the ajax.ctp layout
            // http://localhost/members/index
            $this->layout = 'ajax';
        }
    
    
        function signup() {
            // Does not work, loads the default.ctp layout
            //http://localhost/members/signup
            $this->layout = 'ajax';
        }
    
    }
    ?>
    

    函数 index() 正确加载了 ajax 布局,但 signup() 保持加载默认值。 原来的错误是我没有 view/signup.ctp。一旦我添加它加载了正确的布局。这是一个心不在焉的错误,但让我在错误的树上吠叫,因为标志指向布局问题而不是视图问题。

    【讨论】:

      【解决方案2】:

      需要检查的几件事

      • 制作自定义 pages_controller.php
      • 定义变量 $layout 并将其设置为您想要的布局。
      • 确保布局存在于 视图/布局/

      【讨论】:

      • 我设置了 $this->layout = 'xxx';在app/controllers/pages_controller的显示功能中,对吧?
      • 是的,你就是这样做的。该页面控制器是正在加载的页面吗?检查通过在其中创建一个函数以输出一些简单的内容,并尝试加载该 url(例如,制作 PagesController::test(),并尝试访问 /pages/test)
      • 是的,我一直在尝试,但无济于事。它没有通过任何东西。我读过的所有内容都说我只需放置一个 /app/controllers/pages_controller.php 并设置它。是否有另一个开关可以翻转?
      • 检查 config 文件夹中的 route.php。看看它是否被重新路由到其他地方。
      • 这是我的 app_controller 中的 beforeFilter() 的问题。我认为它不允许我在没有首先进行身份验证的情况下传递任何 set(var)。
      【解决方案3】:

      转到以下链接“lib\Cake\Controller”打开 CakeErrorController.php 添加您的布局。

      public function __construct($request = null, $response = null) {
              parent::__construct($request, $response);
              $this->constructClasses();
              $this->Components->trigger('initialize', array(&$this));
              $this->_set(array('cacheAction' => false, 'viewPath' => 'Errors'));
              $this->layout='student';
          }
      

      【讨论】:

        【解决方案4】:

        我遇到了同样的问题,所有错误都具有误导性。 我的问题最终是我试图使用没有后备表/模型的控制器,所以我试图在控制器的 $name 成员变量中重用其他名称,否则它会说模型没有不存在。 长话短说,请确保您的控制器名称具有具有相同命名约定的支持模型对象。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-10-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多