PHP MVC框架最佳实践:如何在视图模板中区分模型变量与其他变量?

时间:2014-03-04 03:16:03

标签: php templates laravel kohana

在为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[]的数组中来识别与视图相关的变量。)

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

2 个答案:

答案 0 :(得分:0)

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

毕竟,如果您需要在视图中输出模型集合,则无论如何都必须直接使用模型。因此,在将一个模型发送到视图时,没有理由说它们有什么不同。

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

答案 1 :(得分:0)

使用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对象访问所有模型属性。这将它们与其他变量分开。非常简单。