国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

請教大佬們兩個問題:redirect 和 BusinessException

yookey

問題描述

問題一

重定向方法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),謝謝!

624 1 0
1個回答

walkor 打賞

異常處理參考文檔,你可以自己定義一個異常類,加上你要的參數(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)了。

  • yookey 2024-09-19

    好的,已經(jīng)完美解決問題,感謝大佬!

??