最小化 MVC 视图中的 PHP 逻辑


Minimising PHP logic in the View of an MVC

我有一些html代码,里面有一些php变量,它描述了我的搜索结果中单个条目的内容(例如图片,姓名,共同朋友的数量等) - 这在下面的代码中被称为search_results_v.php。 我有一个数组,其中包含来自数据库的几条记录,对于其中的每一条,我都会创建一个搜索结果条目。 我构建程序的方式是MVC,所以html代码是视图,我有一个php控制器。

但是,我有一个网站模板,并希望在此模板中包含我的搜索结果。 这可以通过在此网页的适当部分调用我的控制器轻松解决,但我想制作我的应用程序,以便控制器控制一切! 在我刚刚提到的情况下,视图正在调用控制器,但我想有一个像下面这样的设置,我只是在我的控制器中"包含"网页。

如何在网页中呈现搜索结果,同时最大限度地减少其中的 php 逻辑量? 我考虑这样做的一种方法是将所有搜索结果的所有 html 代码存储在一个 php 字符串变量中,然后在我的网页中引用这个变量。 如何将 html 代码存储在该变量中?

// Generates my search result box - Fill in the profile picture, the name and the number of mutual friends
    foreach ($resultsInfo as $entry) {
        $uid      = $entry['uid'];
        $pic_link = $entry['pic_square'];
        $name     = $entry['name'];
        $mfCount  = $entry['mutual_friend_count'];
        include('searchresults_v.php');
    }

编辑:好吧,也许我要的不完全是MVC。 我试图尽可能地将实际的后端编码与界面分开,以便更熟练的人可以进来设计界面。 我基本上想生成所有动态数据,并且在我的 html 文件中有一些占位符,以便内容可以溜进去。 我不希望里面有任何逻辑来混淆那些可能只有网页设计经验的人。

让我知道我应该将标题更改为什么。

在 MVC 中,视图始终可以包含循环语句和条件语句。基本思想是不要在视图中实现查询/业务逻辑,这应该由模型完成

在您的情况下,恕我直言,您应该构建的内容是这样的:

  1. 控制器调用一个模型,该模型生成所有必需的信息,并将其格式化为数组、JSON 字符串或类对象,并将其传递回控制器。

  2. 控制器将此数据挂接到视图中。视图循环遍历数组/json/对象,并以页面需要显示的任何格式显示内容

你能在模板中包含你的视图吗?您可以将视图的文件名传递给模板,并将其包含在模板的中间。

如果你想在没有CodeIgniter,CakePHP,Symfony等框架的情况下继续前进,你可以看看Smarty。它非常易于使用,并使模板非常易读。你可以最小化逻辑,但它给你足够的腿部空间,如果你需要的话,把逻辑放在那里。

http://www.smarty.net/

http://www.smarty.net/syntax_comparison

使用 smarty,您可以将生成模板的文件视为控制器/视图。完成所有逻辑,收集所有数据等,然后将其传递给您的智能模板。

Hy

您可以创建一个没有任何逻辑的 HTML 页面。对于包含用户的表,您只创建用户的一个示例行。请参阅以下示例:

<table>
     <tr>
        <td>Firstname</td>
        <td>Lastname</td>
        <td>Age</td>
     </tr>
     <tr class='user'>
        <td class='firstname'></td>
        <td class='lastname'><td>
        <td class='age'><td>
     </tr>
</table>

之后,您将带有PHP的HTML文件(Lib,例如Simple HTML Dom Parser)解析为对象。

此时,您可以使用PHP生成视图,例如克隆,删除,重命名,填充视图中的元素,例如jQuery所做的"find(.firstname)"。编辑视图后,从对象生成 HTML。

我更喜欢这种方法,因为网页设计师只需要使用 HTML 和 CSS 创建视图,而不应该学习模板的工作原理(例如 PHPTal)

希望这个帮助

我会使用 jquery(或任何其他 Js 框架)在 JSON 中获取我的数据并添加 php 无法提供的所有客户端副作用