内容管理系统页面

Introduction

所有网站都有页面。在 Winter 中,前端页面由页面模板呈现。页面模板文件位于/pages 主题目录的子目录。页面文件名不影响路由,但最好根据页面的功能命名页面。这些文件应该有htm 扩大。这ConfigurationTwig 页面需要模板部分,但是PHP 部分 是可选的。下面,您可以看到最简单的主页示例:

url = "/"
==
<h1>Hello, world!</h1>

页面配置

页面配置定义在配置部分 页面模板文件。页面配置定义页面参数,路由和呈现页面及其Components,这在另一篇文章中进行了解释。页面支持以下配置参数:

Parameter Description
url 页面 URL,必填。 URL 语法如下所述。
title 页面标题,必填。
layout 这一页layout, 选修的。如果指定,应包含布局文件的名称,不带扩展名,例如:default.
description 后端接口的页面描述,可选。
hidden 隐藏页面只能由登录的后端用户访问,可选。

网址语法

页面 URL 定义为url 配置参数。 URL 应以正斜杠字符开头,并且可以包含参数。没有参数的 URL 是固定且严格的。在以下示例中,页面 URL 是/blog.

url = "/blog"

NOTE: 默认情况下,页面 URL 不区分大小写。

带参数的 URL 更灵活。将针对任何地址显示具有以下示例中定义的 URL 模式的页面,例如/blog/post/something. URL 参数可以通过 Winter 组件或从页面访问PHP代码 部分。

url = "/blog/post/:post_id"

这是从页面的 PHP 部分访问 URL 参数的方法(请参阅动态页面 部分了解更多详情):

url = "/blog/post/:post_id"
==
function onStart()
{
    $post_id = $this->param('post_id');
}
==

参数名称应与 PHP 变量名称兼容。要使参数可选,请在其名称后添加问号:

url = "/blog/post/:post_id?"

URL 中间的参数不能是可选的。在下一个示例中,:post_id 参数标记为可选,但根据需要进行处理。

url = "/blog/:post_id?/comments"

可选参数可以具有默认值,这些默认值用作后备值,以防真正的参数值未出现在 URL 中。默认值不能包含任何星号、竖线符号或问号。默认值在之后指定问号.在下一个示例中,category_id 参数将是10 对于网址/blog/category.

url = "/blog/category/:category_id?10"

您还可以使用正则表达式来验证参数。要添加验证表达式,请在参数名称后添加管道符号或问号,然后指定表达式。这些表达式中不允许使用正斜杠符号。例子:

url = "/blog/:post_id|^[0-9]+$/comments" - this will match /blog/10/comments
...
url = "/blog/:post_id|^[0-9]+$" - this will match /blog/3
...
url = "/blog/:post_name?|^[a-z0-9\-]+$" - this will match /blog/my-blog-post

可以使用一个特殊的通配符 通过放置一个参数星号 参数后。与常规参数不同,通配符参数可以匹配一个或多个 URL 段。 URL 只能包含一个通配符参数,不能使用正则表达式,也不能后跟可选参数。

url = "/blog/:category*/:slug"

通配符参数本身可以通过在星号前加上? 然而性格。

url = "/blog/:slug?*"

例如,像这样的 URL/color/:color/make/:make*/edit 将匹配/color/brown/make/volkswagen/beetle/retro/edit 并提取以下参数值:

- color: `brown` - make: `volkswagen/beetle/retro`

NOTE: 子目录不影响页面 URL - URL 仅使用url 范围。

动态页面

在 - 的里面树枝节 一个页面模板,你可以使用任何Winter 提供的函数、过滤器和标签.任何动态页面都需要variables.在Winter,变量可能由页面准备,布局PHP 部分, 或者通过Components.在本文中,我们将描述如何在 PHP 部分准备变量。

页面执行生命周期

可以在页面和布局的 PHP 部分中定义一些特殊函数:onInit,onStart, 和onEnd.这onInit 函数在所有组件初始化后和处理 AJAX 请求之前执行。这onStart 函数在页面执行开始时执行。这onEnd 函数在页面呈现之前和页面呈现之后执行components 被执行。在里面onStartonEnd 函数,你可以将变量注入到 Twig 环境中。使用array notation 将变量传递给页面:

url = "/"
==
function onStart()
{
    $this['hello'] = "Hello world!";
}
==
<h3>{{ hello }}</h3>

下一个例子更复杂。它展示了如何从数据库中加载一个博文集,并显示在页面上(Acme\Blog插件是虚构的):

url = "/blog"
==
use Acme\Blog\Classes\Post;

function onStart()
{
    $this['posts'] = Post::orderBy('created_at', 'desc')->get();
}
==
<h2>Latest posts</h2>
<ul>
    {% for post in posts %}
        <h3>{{ post.title }}</h3>
        {{ post.content }}
    {% endfor %}
</ul>

Winter 提供的默认变量和 Twig 扩展在标记指南.处理程序执行的顺序由动态布局 文章。

发送自定义回复

执行生命周期中定义的所有方法都能够停止进程并返回响应 - 只需从生命周期函数返回响应即可。下面的示例不会加载任何页面内容,而是返回字符串你好世界! 到浏览器:

function onStart()
{
    return 'Hello world!';
}

一个更有用的例子可能是使用Redirect 正面:

public function onStart()
{
    return Redirect::to('http://google.com');
}

处理表格

您可以使用页面或布局中定义的处理程序方法处理标准表单PHP 部分 (处理 AJAX 请求在AJAX 架构 文章)。使用form_open() 函数来定义引用事件处理程序的表单。例子:

{{ form_open({ request: 'onHandleForm' }) }}
    Please enter a string: <input type="text" name="value"/>
    <input type="submit" value="Submit me!"/>
{{ form_close() }}
<p>Last submitted value: {{ lastValue }}</p>

onHandleForm 功能可以在页面或布局中定义PHP 部分,像这样:

function onHandleForm()
{
    $this['lastValue'] = post('value');
}

处理程序用post 函数并初始化页面的lastValue 在第一个示例中显示在表单下方的属性变量。

NOTE: 如果在页面布局、页面和页面中定义了同名的处理程序component, Winter 将执行页面处理程序。如果在组件和布局中定义了处理程序,则将执行布局处理程序。处理程序优先级为:页面、布局、组件。

如果你想引用一个定义在特定的处理程序component,在处理程序引用中使用组件的名称或别名:

{{ form_open({ request: 'myComponent::onHandleForm' }) }}

404页面

如果主题包含带有 URL 的页面/404,当系统找不到请求的页面时显示。

错误页面

默认情况下,任何错误都将显示一个详细的错误页面,其中包含文件内容、行号和发生错误的堆栈跟踪。您可以通过设置配置值来显示自定义错误页面debugfalse 在里面config/app.php 脚本,并使用 URL 创建页面/error.

页面变量

页面的属性可以在PHP代码部分, 或者Components 通过引用$this->page.

function onEnd()
{
    $this->page->title = 'A different page title';
}

它们也可以在标记中使用this.page 多变的.例如,要返回页面的标题:

<p>The title of this page is: {{ this.page.title }}</p>

更多信息,请访问this.page 在标记指南中.

以编程方式注入页面资产

如果需要,您可以将资产(CSS 和 JavaScript 文件)注入到带有控制器的页面中addCssaddJs 方法。它可以在onStart 中定义的函数PHP 部分 一页或layout 模板。例子:

function onStart()
{
    $this->addCss('assets/css/hello.css');
    $this->addJs('assets/js/app.js');
}

资产编译器 文档以获取更多信息。

豫ICP备18041297号-2