0

我对使用fuelPHP 1.7 有点困惑。

控制器

class Controller_Website extends Controller
{
    public function action_index()
    {
        // http://fuelphp.com/docs/general/views.html

        $data = Website::get_results();

        //var_dump($data) // (data is found here);

        $views = array();
        $views['head'] = View::forge('common/head', $data);
        $views['header'] = View::forge('common/header', $data);
        $views['sidebar'] = View::forge('common/sidebar', $data);
        $views['content'] = View::forge('common/content', $data);
        $views['footer'] = View::forge('common/footer', $data);

        // return the rendered HTML to the Request
        return View::forge('website', $views)->render();
     }
}

该模型

class Website extends \Model
{
    public static function get_results()
    {
        // Database interactions
        $result = DB::select('menu', 'url', 'title', 'text')
            ->from('aaa_website')
            ->where('id', '=', 1035)
            ->and_where('visible', '1')
            ->execute();

        return $result;
    }
}

到目前为止一切顺利。在控制器中查询并找到数据。我想要完成的是使用我的数据:

(嵌套)视图

<html>
<head>
    <?php echo $head; ?>
</head>
<body>
<header>
    <div class="container">
        <?php echo $header; ?>
    </div>
</header>
<div class="row">
    <div class="container">
        <div class="col-md-4">
            <?php echo $sidebar; ?>
        </div>
        <div class="col-md-8">
            <?php echo $content; ?>
        </div>
    </div>
</div>
<footer>
    <div class="container">
        <?php echo $footer; ?>
    </div>
</footer>
</body>
</html>

头视图(嵌套):

<title><?php echo $title; ?></title>

内容视图(嵌套):

<h1><?php echo $title; ?></h1>
<div class="welcome_user"><?php echo $text; ?></div>

等等。

此示例中视图中的变量不可用,因为它们没有在控制器中显式设置。是否必须明确设置它们或者是否也可以传递数据对象?如果是这样,我如何以正确的方式访问这些对象数据?FuelPHP 在这里缺乏很好的例子,我现在被困住了。

我该怎么做?

4

1 回答 1

1

视图数据从索引数组转换为命名的视图变量。所以:

View::forge('something', array('param' => 'value'));

将对应以下视图:

<h1><?=$param?></h1>

出错的地方是您将纯 DB 结果传递给视图。您需要从数据库结果中获取第一个结果,如下所示:

class Website extends \Model
{
    public static function get_results()
    {
        // Database interactions
        $result = DB::select('menu', 'url', 'title', 'text')
            ->from('aaa_website')
            ->where('id', '=', 1035)
            ->and_where('visible', '1')
            ->as_assoc()
            ->execute()
            ->to_array();

        return reset($result);
    }
}

请注意,我首先使用->to_array()将结果对象转换为数组,然后reset()获取第一个结果。我还添加->as_assoc()了确保你得到一个数组结果,->as_object()会给你一个 stdClass 实例。

于 2013-11-15T09:07:47.893 回答