在为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[]
的数组中来识别与视图相关的变量。)
这对我来说似乎都不是很优雅,我想知道其他人是否有同样的问题并提出了更好的解决方案。
答案 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
对象访问所有模型属性。这将它们与其他变量分开。非常简单。