我把view方法统一封装放在base.php中的base类里,然后其他控制器继承extends base,需要调用视图时$this->view(...),没有升级之前使用默认路径没有问题view([xxx]),升级后默认路径定位到我封装在base类的方法了,所有导致找不到控制器的真正路径。
模板引用的路径也不对了: {% include 'public/header.twig'} %}
// class Base
protected function view(mixed $template = null, array $vars = []): Response
{
// 其他业务逻辑...
return view($template, $vars);
}
// 控制器
// class TestController extends Base
public function index(Request $request): Response
{
return $this->view(['a' => 88]);
// 这里正确路径应该是 app/view/test/index.twig
// 但是得到的路径却是 app/view/test/view.twig
}
导致出问题的原因在helpers.php的template_inputs函数里,希望优化一下:
// template_inputs()函数
$backtrace = debug_backtrace();
$action = $backtrace[2]['function'] ?? $request->action;
如果确实需要使用debug_backtrace()来定位,那应该检查当前方法是否在当前控制器下才是正确的路径。
当然,还需要考虑模板引擎引用其他模板的路径问题,之前用相对路径没有问题,现在用绝对路径引用模板路径也有问题。
$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;
}
}
只要在继承类封装view()后再调用继承方法就会有问题
webman:1.6.12
Workerman:5.0.0
执行
composer require workerman/webman-framework:dev-master
试下
更新了,这个问题还没解决,模板引用的路径也不对:{% include 'public/header.twig'} %}
在app/view/test/index.twig 引入 在app/view/public/header.twig
测试了下,如果需要在模板引用其他页面,template_inputs函数里的模板路径只能用相对路径,看看大佬有什么解决办法?
我觉得模板路径应该要固定,如果动态获取,很难解决在模板中引用其他模板的路径问题
//function render
再更新
composer require workerman/webman-framework:dev-master
试下OK了