Controller_Template дает создание объекта по умолчанию из пустого значения - PullRequest
0 голосов
/ 12 марта 2011

Я создаю веб-сайт KO3 и создаю новый шаблон Controller_Template, который выглядит следующим образом:

<?php
defined('SYSPATH') or die('No direct script access.');

class Controller_Menu extends Controller_Template {

    public $template = "menu/menu";

    public function __construct() {
        $this->User = \Base\User::getLoggedInUser();
    }

    public function action_show() {
        // Do totally nothing
    }
}

Здесь нет науки о ракетостроении.В моем каталоге APPPATH. "/ Views / menu" у меня есть файл "menu.php", который выглядит следующим образом:

<?php
echo "foobar";

Впечатляет, верно?;)

Когда я пытаюсь загрузить http://localhost/menu/show, я получаю следующую ошибку:

ErrorException [ Strict ]: Creating default object from empty value

SYSPATH/classes/kohana/controller/template.php [ 44 ]

39   */
40  public function after()
41  {
42      if ($this->auto_render === TRUE)
43      {
44          $this->request->response = $this->template;
45      }
46 
47      return parent::after();
48  }
49 

    SYSPATH/classes/kohana/controller/template.php [ 44 ] » Kohana_Core::error_handler(arguments)

    {PHP internal call} » Kohana_Controller_Template->after()

    SYSPATH/classes/kohana/request.php [ 1115 ] » ReflectionMethod->invoke(arguments)

    APPPATH/bootstrap.php [ 129 ] » Kohana_Request->execute()

    DOCROOT/index.php [ 103 ] » require(arguments) 

У меня есть аналогичная функция, реализованная в других контроллерах, и все они работают отлично.Так может кто-нибудь сказать мне, в чем здесь проблема?

EDIT Я сбросил объект запроса в методе after, и он не установлен, то есть он имеет значение null.

1 Ответ

0 голосов
/ 12 марта 2011

Я нашел решение.Мне пришлось вызвать родительский конструктор в моем перезаписанном конструкторе.Изменение кода на:

class Controller_Menu extends Controller_Template {

    public $template = "menu/menu";

    public function before() {
        $this->User = \Base\User::getLoggedInUser();
    }

    public function action_show() {
        // Do totally nothing
    }
}

Исправлена ​​моя проблема.

РЕДАКТИРОВАТЬ

Изменен код предложения в комментариях.

...