【问题标题】:PHP MVC Framework Best Practice: How to distinguish model variables from other variables in view templates?PHP MVC 框架最佳实践:如何在视图模板中区分模型变量和其他变量?
【发布时间】:2014-04-05 09:49:58
【问题描述】:

在为 PHP MVC/MVP 框架编写视图模板文件时如何引用/保持变量分离的最佳实践,以及如何避免可能的变量名冲突?

有问题的视图模板代码片段

<html>
  <head>
    <title>{{$title}}</title> <!-- page title wanted here -->
  </head>
  <body>
    <pre>
    Your Model Data
    Title: {{$title}} <!-- model field named 'title' wanted here -->
    Date: {{$date}}
    ...

如您所见,$title 变量命名不当,可能表示页面标题或模型标题字段。 $date 变量很容易发生同样的情况。

在过去的不同项目中,我要么采用不同命名变量的策略,要么在将它们分配给视图或创建视图的函数时将它们放在子数组中。 (例如,仅通过在它们前面加上 view_ 或将它们放入名为 view[] 的数组中来识别与视图相关的变量。)

这对我来说似乎都不是很优雅,我想知道其他人是否有同样的问题并想出了更好的解决方案。

【问题讨论】:

  • 你能说得更具体些吗?太板了,具体框架有什么问题吗?每个可能都有自己的解决方法,但总的来说您可以使用数组。
  • 这个问题确实很广泛,但我不知道如何更具体。这是我在使用 CodeIgniter、Kohana 和 Laravel 时遇到的一个问题,因此它不是特定于它们中的任何一个。我不是在寻找个人的“解决方法”,而是想知道人们是否采用了一些可以普遍应用的最佳实践。对于如何更好地提出这个问题的任何建议,我都会很高兴。

标签: php templates laravel kohana


【解决方案1】:

将整个模型实例发送到视图是相当普遍的,而不是在单个变量中发送数据。这解决了名称冲突问题。

毕竟,如果你需要在一个 View 中输出模型的集合,无论如何你都必须直接使用模型。因此,没有理由将一个模型发送到视图时会有所不同。

您仍然可以根据需要以任何方式格式化模型内的数据,并将模型用作数据容器将其传递给视图。这也使得将来扩展 View 的内容变得更容易,因为您可以使用所有模型的数据。

【讨论】:

    【解决方案2】:

    对于 Laravel,我会为示例博客文章执行以下操作。

    在我的控制器中:

    //get the post
    $post = Post::find(1);
    //set the page title
    $title = $post->title . ' - Some other stuff I want to append';
    //send them to the view
    return View::make('blog.post')->with([
       'title' => $title,
       'post' => $post
    ]);
    

    在我看来:

    ....
    <head><title>{{ $title }}</title</head>
    <body>
    <h1>{{ $post->title }}</h1>
    <em>{{ $post->date }}</em>
    {{ $post->content }}
    </body>
    ...
    

    这样,模型对象被分配给post,您可以通过post 对象访问所有模型属性。这将它们与其他变量区分开来。很简单。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-16
      • 2011-04-08
      • 1970-01-01
      • 1970-01-01
      • 2012-06-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多