Phalcon7 视图的使用
视图代表了应用程序中的用户界面. 视图通常是在 HTML 文件里嵌入 PHP 代码,这些代码仅仅是用来展示数据。 视图的任务是当应用程序发生请求时,提供数据给 web 浏览器或者其他工具。
Phalcon\Mvc\View 和 Phalcon\Mvc\View\Simple 负责管理你的MVC应用程序的视图(View)层。
集成视图到控制器
当某个控制器已经完成了它的周期,Phalcon自动将执行传递到视图组件。视图组件将在视图文件夹中寻找一个文件夹名与最后一个控制器名相同,文件命名与最后一个动作相同的文件执行。例如,如果请求的URL http://127.0.0.1/blog/posts/show/301, Phalcon将如下所示的方式按解析URL:
Server Address | 127.0.0.1 |
Phalcon Directory | blog |
Controller | posts |
Action | show |
Parameter | 301 |
调度程序将寻找一个“PostsController”控制器及其“showAction”动作。对于这个示例的一个简单的控制器文件:
<?php use Phalcon\Mvc\Controller; class PostsController extends Controller { public function indexAction() { } public function showAction($postId) { // Pass the $postId parameter to the view $this->view->postId = $postId; } }
setVar允许我们创建视图变量,这样可以在视图模板中使用它们。上面的示例演示了如何传递 $postId
参数到相应的视图模板。
分层渲染
Phalcon\Mvc\View 支持文件的层次结构,在Phalcon中是默认的视图渲染组件。这个层次结构允许通用的布局点(常用的视图)和以控制器命名的文件夹中定义各自的视图模板
该组件使用默认PHP本身作为模板引擎,因此视图应该以.phtml作为拓展名。如果视图目录是 app/views ,视图组件会自动找到这三个视图文件。
名称 | 文件 | 解释 |
---|---|---|
Action View | app/views/posts/show.phtml | 这是该动作相关的视图。它只会在执行 “show” 动作时显示。 |
Controller Layout | app/views/layouts/posts.phtml | 这是该控制器相关的视图。它只会 “posts” 控制器内每个动作执行时显示。这个控制器的所有动作将重用这个布局的全部代码。 |
Main Layout | app/views/index.phtml | 这是主布局,它将在应用程序的每个控制器或动作执行时显示。 |
你不需要实现上面提到的所有文件。在文件的层次结构中 Phalcon\Mvc\View 将简单地移动到下一个视图级别。如果这三个视图文件被实现,他们将被按下面方式处理:
<!-- app/views/posts/show.phtml --> <h3>This is show view!</h3> <p>I have received the parameter <?php echo $postId; ?></p>
<!-- app/views/layouts/posts.phtml --> <h2>This is the "posts" controller layout!</h2> <?php echo $this->getContent(); ?>
<!-- app/views/index.phtml --> <html> <head> <title>Example</title> </head> <body> <h1>This is main layout!</h1> <?php echo $this->getContent(); ?> </body> </html>
注意方法 $this->getContent()
被调用的这行。这种方法指示 Phalcon\Mvc\View 在这里注入前面视图层次结构执行的内容。
请求生成的HTML的将为:
<!-- app/views/index.phtml --> <html> <head> <title>Example</title> </head> <body> <h1>This is main layout!</h1> <!-- app/views/layouts/posts.phtml --> <h2>This is the "posts" controller layout!</h2> <!-- app/views/posts/show.phtml --> <h3>This is show view!</h3> <p>I have received the parameter 101</p> </body> </html>
命名空间视图渲染
默认启用,可以关闭命名空间视图渲染:
<?php use Phalcon\Mvc\View; $di->set('view', function () { $view = new View(); // Disable namespace view render $view->disableNamespaceView(); return $view; }, true);
如果设置路由,对上述的URL做如下解析:
Server Address | 127.0.0.1 |
Namespace | blog |
Controller | posts |
Action | show |
Parameter | 301 |
视图组件会自动找到这四个视图文件。
名称 | 文件 | 解释 |
---|---|---|
Action View | app/views/blog/posts/show.phtml | 这是该动作相关的视图。 |
Controller Layout | app/views/layouts/blog/posts.phtml | 这是该控制器相关的视图。 |
Namespace Layout | app/views/layouts/namespace/blogs.phtml | 这是该命名空间相关的视图。 |
Main Layout | app/views/index.phtml | 这是主布局。 |
更多建议: