动态页面
在页面模板的“ Twig”部分内,您可以使用october提供的任何功能,过滤器和标签。任何动态页面都需要变量。在october页面变量可以通过页面或布局PHP部分或组件来准备。在本文中,我们将介绍如何在PHP部分中准备变量。
页执行生命周期
可以在页面和布局PHP部分来定义特殊功能:onInit,onStart和onEnd。
- onInit当所有组件被初始化并且处理AJAX请求之前,该函数被执行。
- onStart函数在页面执行开始时执行。
- onEnd函数在页面呈现之前和页面组件执行之后执行。
- onStart、onEnd函数中,您可以向Twig环境注入变量、使用数组或标记将变量传递到页面:
url = "/"
==
function onStart()
{
$this['hello'] = "Hello world!";
}
==
<h3>{{ hello }}</h3>
书写代码,在模板中可以通过{{hello}}输出变量
下一个例子比较复杂。它显示如何从数据库加载博客文章集合并显示在页面上(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>
在php代码区获取所有帖子信息,并注入到模板中的posts变量中,可以在模板中使用
october提供的默认变量和Twig扩展在“标记指南”中有描述。在动态布局文章中介绍了执行处理程序的整体顺序。
发送自定义响应
在执行生命周期中定义的所有方法都有能力停止进程并返回响应。只需返回生命周期功能的响应。下面的示例将不会加载任何页面内容并返回字符串Hello world!浏览器:
function onStart()
{
return 'Hello world!';
}
可以使用laravel的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>
在代码部分可以
function onHandleForm() {
$this['lastValue'] = input('value');
}
function onHandleForm()
{
$this['lastValue'] = post('value');
}
注意:如果在页面布局中定义了具有相同名称的处理程序,则页面和页面组件 october将执行页面处理程序。如果在组件和布局中定义了处理程序,则将执行布局处理程序。处理程序的优先级是:页面,布局,组件。
如果要引用特定组件中定义的处理程序,请在处理程序引用中使用组件名称或别名:
{{ form_open({ request: 'myComponent::onHandleForm' }) }}
404页
如果主题包含具有URL的页面,则/404在系统找不到请求的页面时显示该页面。
错误页面
默认情况下,将显示包含错误发生的文件内容,行号和堆栈跟踪的详细错误页面您可以通过在脚本中将配置值设置debug为falseconfig/app.php并创建带有该URL的页面来显示自定义错误页面/error。
页面变量
代码中
function onEnd()
{
$this->page->title = 'A different page title';
}
模板中
<p>The title of this page is: {{ this.page.title }}</p*>
//this.page
this.page.layout
this.page.id
this.page.title
this.page.description
this.page.meta_title
this.page.meta_description
this.page.hidden //判断是否登录可见
以编程方式注入页面资源
如果需要,您可以使用控制器addCss和addJs方法将资源(CSS和JavaScript文件)注入页面。它可以在页面或布局模板onStart的PHP部分定义的函数中完成。例:
function onStart()
{
$this->addCss('assets/css/hello.css');
$this->addJs('assets/js/app.js');
}
如果在指定的路径addCss和addJs方法参数与斜线(/)开始那么这将是相对于网站根。如果资产路径不以斜杠开头,那么它与主题相关。
注入资产可以通过将它们作为数组传递
function onStart()
{
$this->addCss(['assets/css/hello.css', 'assets/css/goodbye.css']);
$this->addJs(['assets/js/app.js', 'assets/js/nav.js']);
}
LESS和SCSS资产可以使用组合器进行注入和编译:
function onStart()
{
$this->addCss(['assets/less/base.less']);
}
为了在页面或布局上输出注入的资产,请使用{%styles%}和{%scripts%}标签。例:
<head>
...
{% styles %}
</head>
<body>
...
{% scripts %}
</body>