StartMVC开发手册

可以快速上手的开发文档

手册目录

重定向与跳转

重定向与跳转

控制器提供了重定向(redirect)与业务跳转(success / error / response)两类方法。它们都会中断当前方法的后续代码,把响应交给框架统一发送,因此调用之后无需再手动 exit()

重定向 redirect()

$this->redirect($url) 设置 302 状态码与 Location 响应头,随即中断当前方法。

namespace app\home\controller;
use startmvc\core\Controller;

class IndexController extends Controller
{
 public function indexAction()
 {
 // 用 url() 助手生成地址(自动带上 URL 后缀,如 /home/index/login.html)
 $this->redirect($this->url('home/index/login'));
 }

 public function loginAction()
 {
 $this->redirect('http://www.baidu.com'); // 重定向到站外地址
 }
}

需要 301(永久)等其它状态码时,直接使用响应对象:

use startmvc\core\Response;

return (new Response())->redirect('/new-url', 301);

页面跳转 success() / error()

页面跳转用于业务处理结束后展示提示信息,并跳转到指定页面:

$this->success($msg = '', $url = '', $data = [], $ajax = false); // 操作成功
$this->error($msg = '', $url = '', $data = [], $ajax = false); // 操作失败
  • $msg —— 提示信息
  • $url —— 跳转地址,留空时返回上一页
  • $data —— 附加的输出数据
  • $ajax —— 输出形式:false 输出跳转页面,true 输出 JSON 字符串,默认 false

两个方法会自动判断当前请求是否为 Ajax 请求(X-Requested-With: XMLHttpRequest):是则输出 JSON,否则输出跳转页面;也可以用 $ajax 手动指定。

public function saveAction()
{
 if ($ok) {
 $this->success('操作成功', '/home/index/index');
 } else {
 $this->error('操作失败'); // 不指定地址,默认返回上一页
 }
}

数据返回 response()

$this->response($code = '', $msg = '', $url = '', $data = [], $ajax = false);

用法与 success() / error() 一致,多一个 $code 参数,用于 API 接口返回业务状态码:1 代表成功、0 代表失败,也可以自定义自己的编码,方便前台判断。实际上 success()error() 就是对它的封装。

响应格式

非 Ajax 请求:渲染跳转模板 startmvc/core/tpl/jump.php,展示提示信息并在 3 秒后自动跳转。$url 留空时:成功返回上一页并刷新(常用于表单提交后),失败返回上一页并保留表单数据。

Ajax 请求:返回 JSON,响应头为 application/json; charset=utf-8,结构如下:

{
 "code": 1,
 "msg": "操作成功",
 "url": "/home/index/index",
 "data": []
}

其中 code 为业务状态码、msg 为提示信息、url 为跳转地址、data 为调用时传入的附加数据。

接口返回的是标准 JSON 字符串,中文不会被转义成 \uXXXX;同时 json_encode 会把正斜杠转义为 \/(如 "url":"\/home\/index\/index"),这是合法 JSON,前端 JSON.parse() 之后仍是普通斜杠。