2

关于 PHP 中的一般 MVC 设计原则的快速问题,使用 CodeIgniter 或 Kohana(我实际上使用的是 Kohana)。

我是 MVC 的新手,不想弄错......所以我想知道我是否有表格:

categories, pages, notes

我为每个控制器创建一个单独的控制器和视图......?所以人们可以去

/category/#
/page/#
/note/#

但是然后假设我还希望能够在每页显示多个笔记,从页面视图循环调用笔记视图会很糟糕。那么我是否应该创建某种函数来绘制笔记并将变量从笔记视图和页面视图中的循环传递给该函数?这将是最好的方法吗,如果不是我应该怎么做......?

谢谢,

谢尔伊

4

4 回答 4

1

是的,不是只将 1 个实体(类别、页面、注释)传递给您的视图,而是传递一个实体列表。通过视图内的循环,您可以显示整个列表。该视图可能会调用另一个知道如何显示一个条目的视图(或函数)。

于 2009-11-15T14:09:33.337 回答
1

我个人对一个项目有一个“显示”方法,对多个项目有一个“列表”方法。在您的控制器中,您可以$page_data['note'] = get_note(cat_id,page_id)对“show”方法和$page_data['notes'] = get_all_notes(cat_id)“list”方法说类似的话。

然后在您的视图中,您循环遍历$page_data['notes']并显示每个 HTML。如果列表视图使用与“显示”视图相同的“注释”HTML,请创建一个模板或函数来吐出给定注释的 HTML:

// In your "list" view
foreach($n in $page_data['notes']){
    print_note_html($n)
}

//In your "show" view
print_note_html($n)

print_note_html函数可以是 Notes 的所有视图都可以访问的辅助方法。有道理?

于 2009-11-18T02:05:22.080 回答
0
  1. 您可以在视图中循环。允许的 View 也可以访问 MVC 中的模型。见:http ://www.phpwact.org/pattern/model_view_controller
  2. 您不需要为每个表设置一个控制器(或模型)。
于 2009-11-15T13:27:20.153 回答
0

在 CodeIgniter 中,我创建了一个单独的帮助文件,其中放置了返回 UI 元素标记的函数,这些元素可能需要在一个视图中多次包含。

在您的示例中,我将创建一个函数来返回注释的标记。

应用程序/helpers/view_helper.php

function note($note)
{
    return '<div class="note">' .
        '<h2>' . $note->title . '</h2>' .
        '<p>' . $note->contents . '</p></div>';
}

我通常会自动加载这个帮助文件。然后在视图中我会做这样的事情。

echo note($note);

对于视图中的注释列表,我将迭代调用此函数的列表。

<div class="note-list">
<?php foreach ($notes as $note) : ?>
    <?php echo note($note); ?>
<?php endforeach; ?>
</div>

我发现在另一个视图中多次包含一个视图很慢。这就是我这样做的原因。

编辑

我刚刚研究了 CodeIgniter Loader 类,并且确定每次调用时都会执行 PHP 包含

$this->load->view('view_name');

这意味着如果您使用此方法显示 20 个注释的列表,您将执行 20 个单独的包含。

于 2010-02-22T18:36:09.577 回答