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

webman的view默認(rèn)路徑有BUG

wgole

問題描述

我把view方法統(tǒng)一封裝放在base.php中的base類里,然后其他控制器繼承extends base,需要調(diào)用視圖時(shí)$this->view(...),沒有升級(jí)之前使用默認(rèn)路徑?jīng)]有問題view([xxx]),升級(jí)后默認(rèn)路徑定位到我封裝在base類的方法了,所有導(dǎo)致找不到控制器的真正路徑。

模板引用的路徑也不對(duì)了: {% include 'public/header.twig'} %}

程序代碼或配置

// class Base
    protected function view(mixed $template = null, array $vars = []): Response
    {
        // 其他業(yè)務(wù)邏輯...

        return view($template, $vars);
    }

// 控制器
// class TestController extends Base
    public function index(Request $request): Response
    {
        return $this->view(['a' => 88]);

        // 這里正確路徑應(yīng)該是 app/view/test/index.twig
        // 但是得到的路徑卻是 app/view/test/view.twig
    }

導(dǎo)致出問題的原因在helpers.php的template_inputs函數(shù)里,希望優(yōu)化一下:

// template_inputs()函數(shù)
            $backtrace = debug_backtrace();
            $action = $backtrace[2]['function'] ?? $request->action;

如果確實(shí)需要使用debug_backtrace()來定位,那應(yīng)該檢查當(dāng)前方法是否在當(dāng)前控制器下才是正確的路徑。
當(dāng)然,還需要考慮模板引擎引用其他模板的路徑問題,之前用相對(duì)路徑?jīng)]有問題,現(xiàn)在用絕對(duì)路徑引用模板路徑也有問題。

            $action = $request->action;
            $backtrace = debug_backtrace();
            foreach ($backtrace as $backtraceItem) {
                if (isset($backtraceItem['class']) && $backtraceItem['class'] == $request->controller && isset($backtraceItem['function'])) {
                    $action = $backtraceItem['function'];
                    break;
                }
            }

重現(xiàn)問題的步驟

只要在繼承類封裝view()后再調(diào)用繼承方法就會(huì)有問題

操作系統(tǒng)環(huán)境及workerman/webman等具體版本

webman:1.6.12
Workerman:5.0.0

573 1 1
1個(gè)回答

walkor 打賞

執(zhí)行
composer require workerman/webman-framework:dev-master
試下

  • wgole 2025-01-03

    更新了,這個(gè)問題還沒解決,模板引用的路徑也不對(duì):{% include 'public/header.twig'} %}

    在app/view/test/index.twig 引入 在app/view/public/header.twig

  • wgole 2025-01-03

    測(cè)試了下,如果需要在模板引用其他頁(yè)面,template_inputs函數(shù)里的模板路徑只能用相對(duì)路徑,看看大佬有什么解決辦法?

  • wgole 2025-01-03

    我覺得模板路徑應(yīng)該要固定,如果動(dòng)態(tài)獲取,很難解決在模板中引用其他模板的路徑問題
    //function render

        $viewPath = $app === '' ? "$baseViewPath/view/" : "$baseViewPath/$app/view/";
        $viewPath = str_replace('\\', '/', $viewPath);
        if ($template[0] === '/') {
            $templatePath = str_replace('\\', '/', base_path() . $template);
            $template = str_replace($viewPath, '', $templatePath);
        }
  • walkor 2025-01-03

    再更新 composer require workerman/webman-framework:dev-master 試下

  • wgole 2025-01-03

    OK了

??