重定向方法redirect(url)
能否在 控制器類
的父類中可實現(xiàn)跳轉(zhuǎn)(文檔是說只能在中間件或控制器中可跳轉(zhuǎn))
//基類
abstract class Base
{
....
public function xyz()
{
...
if($flag) {
return redirect(url); // 這里是不能跳轉(zhuǎn)的
}
}
}
//控制器類
class Index extends Base
{
public function index()
{
.....
return redirect(url); //這里跳轉(zhuǎn)是正常
}
}
業(yè)務(wù)類 BusinessException,當(dāng)前只有傳遞兩個參數(shù),怎么改造可以傳遞多個參數(shù),能返回如下的json數(shù)據(jù)格式(或者返回能指定視圖模板更靈活):
//改造后能實現(xiàn)的調(diào)用
ChangException("信息", 200, ['url'=>'http://m.wtbis.cn/'])
//返回給終端
{"code":200, "msg":"信息", data:['數(shù)組']}
請教下大佬們是否好實現(xiàn),謝謝!
異常處理參考文檔,你可以自己定義一個異常類,加上你要的參數(shù)和你需要渲染的結(jié)果
http://m.wtbis.cn/doc/webman/exception.html#%E8%87%AA%E5%AE%9A%E4%B9%89%E4%B8%9A%E5%8A%A1%E5%BC%82%E5%B8%B8
redirect()實際上就是返回一個response對象,你能讓被調(diào)用的控制器返回這個對象就行,例如。
class Index extends Base
{
public function index()
{
.....
return $this->xyz();
}
}
如果你想要在任意位置跳轉(zhuǎn)(非控制器),也可以利用自定義異常做到,自定義異常的render方法里return redirect(...);就好了。
<?php
namespace app\exception;
use support\exception\BusinessException;
use Webman\Http\Request;
use Webman\Http\Response;
class Redirect extends BusinessException
{
protected $location;
public function __construct($location)
{
$this->location = $location;
}
public function render(Request $request): ?Response
{
return redirect($this->location);
}
}
app/functions.php里封裝一個函數(shù)
use app\exception\Redirect;
function my_redirect($location)
{
throw new Redirect($location);
}
這樣在任意位置調(diào)用my_redirect()就可以跳轉(zhuǎn)了。