上次课程我们讲了如何使用页面模板,这次课我们讲解一下如何在页面之间传值以及跳转。
页面的URL
在框架之中,所有的URL都是由 router.json
文件来维护生成的,也就是说,所有的URL都是动态的,换而言之,我们不能直接写URL,而是要通过函数来实现生成URL,在PHP代码中,我们通过 u
函数来实现获取URL,在页面中,我们通过 @u
标记来获取URL,一个URL如何获取?通过他们的唯一名字来获取,函数调用:
1 2
| $self = u(); $url = u('hello');
|
当前的页面路由:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| { "index": { "class": "cn\\atd3\\response\\IndexResponse", "url": "\/" }, "hello": { "url": "\/hello", "template": "hello" }, "action_page": { "url": "\/action-page", "class": "cn\\atd3\\response\\ActionPageResponse" } }
|
测试结果:
我们在模板文件中也可以使用,等价代码:
1 2
| <p>@u</p> <p>@u('hello')</p>
|
创建一个页面,用来显示 form 页面,其中路由名为 form-action
, URL 为 /my-form-action
, 调用的类:cn\atd3\response\FormActionResponse
,使用的模板名称随意,建议 form-action.tpl.html
以上为上节课的练习,不会的多看看上节课
在模板中添加一个GET表单:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34
| <!DOCTYPE html> <html lang="en">
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Action PAGE</title> </head>
<body>
<form action="@u" method="GET"> <div> <input type="text" name="text_value"> </div> <div> <input type="number" name="int_value"> </div> <button>提交数据</button> </form>
<div> <h3>提交的数据</h3> <div> {{ $:text }} </div> <div> {{ $:int }} </div> </div> </body>
</html>
|
如上页面显示后,效果如下:
注意: HTML知识自己要去学
GET 方法提交数据
随便填写数据,点击提交后的效果如下:
可以看到页面URL上面的值就是我们刚刚提交的数据.那么,如何在PHP中获取到这些数据?我之前提到过我们的 Request 类. 在这个类中,可以获取到GET参数.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <?php namespace cn\atd3\response;
use suda\core\Request;
class FormActionResponse extends \suda\core\Response { public function onRequest(Request $request) { $view = $this->page('form-action'); if ($request->hasGet()) { $view->set('text',$request->get('text_value')); $view->set('int',$request->get('int_value')); } $view->render(); } }
|
运行结果:
可以看到页面获取到了值并加入进去
POST 方法提交数据
其实把 method 改成 POST 就可以了, POST与GET的区别大致如下:
- POST 可以提交的数据比 GET多
- POST 可以提交文件
- POST 安全性比GET好一点 数据不是明文传输
POST数据的处理:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| <?php namespace cn\atd3\response;
use suda\core\Request;
class FormActionResponse extends \suda\core\Response { public function onRequest(Request $request) { $view = $this->page('form-action'); if ($request->hasGet()) { $view->set('method','GET'); $view->set('text',$request->get('text_value')); $view->set('int',$request->get('int_value')); } else if ($request->hasPost()) { $view->set('method','POST'); $view->set('text',$request->post('text_value')); $view->set('int',$request->post('int_value')); } $view->render(); } }
|
网页HTML
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| <!DOCTYPE html> <html lang="en">
<head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Action PAGE</title> </head>
<body>
<form action="@u" method="GET"> <div> <input type="text" name="text_value"> </div> <div> <input type="number" name="int_value"> </div> <button>提交GET数据</button> </form> <form action="@u" method="POST"> <div> <input type="text" name="text_value"> </div> <div> <input type="number" name="int_value"> </div> <button>提交POST数据</button> </form> <div> <h3>提交的数据 {{$:method}} </h3> <div> {{ $:text }} </div> <div> {{ $:int }} </div> </div> </body>
</html>
|
作业
- 把今天的网页自己写好,我故意没写详细,这样你们多练习下。
- 写一个超链接,跳到 hello 页面