查看和变量

时间:2013-02-19 19:54:45

标签: php kohana-3

我是Kohana框架中的新人。

我想在视图中创建控制器和显示变量。

我的控制器Start.php:

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

class Controller_Start extends Controller_Template {

    public function action_index()
    {
        $view = View::factory('start')
                    ->set('title', array('tytul 1', 'tytul 2'));

                $this->response->body($view);
    }

}
APPPATH / views中的

有Start.php:

<h1><?php echo $title[0] ?></h1>

当我打开网站时出现错误:

View_Exception [ 0 ]: The requested view template could not be found

当我使用以下内容显示操作数据时:

$this->response->body('test');

当我打开网站时有“测试”

我的观点有什么问题?

1 个答案:

答案 0 :(得分:0)

您的控制器缺少模板定义Piotr。

您在Controller中需要做的是定义控制器需要使用的视图:

class Controller_Start extends Controller_Template {

    // This has to be defined
    public $template = 'start';

    public function action_index()
    {
        $this->template->set('title', array('tytul 1', 'tytul 2'));

        // No need to do this if you're extending Controller_Template
        // $this->response->body($view);
    }
}

my_view是位于/application/views文件夹中的模板文件的文件名(不带.php扩展名)。如果它在子文件夹中,则在那里提供,例如:

public $template = 'subfolder/start';

请注意,必须将其定义为字符串,因为Controller_Template::before()方法会将其转换为View object。这意味着您不必在$view内创建自己的action_index()对象,除非您想覆盖默认对象。然后你需要做类似的事情:

class Controller_Start extends Controller_Template {

    public function action_index()
    {
        $view = View::factory('start')
                    ->set('title', array('tytul 1', 'tytul 2'));

        $this->template = $view;

        // And that's it. Controller_Template::after() will set the response
        // body for you automatically
    }
}

如果您希望完全控制模板并且不希望Kohana干涉我建议不要扩展Controller_Template类,而是使用普通Controller和自己渲染视图,例如:

class Controller_Start extends Controller {

    public function action_index()
    {
        $view = View::factory('start')
                    ->set('title', array('tytul 1', 'tytul 2'));

        // Render the view and set it as the response body
        $this->response->body($view->render());
    }
}