Php 诗篇:如何处理专用视图文件?

Php 诗篇:如何处理专用视图文件?,php,testing,model-view-controller,types,psalm-php,Php,Testing,Model View Controller,Types,Psalm Php,我的设置包括一个包含类的lib文件夹和一个包含PHP文件的view文件夹,它们生成输出。视图在视图类中导入,类似于以下内容: 类视图{ 公共函数呈现(字符串$basename,数组$params):字符串{ 提取($params,EXTR_前缀无效,'v'); ob_start(); 包括sprintf('%s/views/%s.php',dirname(_DIR__),$basename); $out=ob_get_contents(); ob_end_clean(); 退回$out; } }

我的设置包括一个包含类的
lib
文件夹和一个包含PHP文件的
view
文件夹,它们生成输出。视图在
视图
类中导入,类似于以下内容:

类视图{
公共函数呈现(字符串$basename,数组$params):字符串{
提取($params,EXTR_前缀无效,'v');
ob_start();
包括sprintf('%s/views/%s.php',dirname(_DIR__),$basename);
$out=ob_get_contents();
ob_end_clean();
退回$out;
}
}
在这种情况下,我对《诗篇》基本上有两个问题:

  • 对于
    View::render
    ,它报告一个
    unsolvableClude
    。我甚至可以用类似的方式键入
    $basename

     @param "view1"|"view2"|"about" $basename
    
    没有效果。无法解决的问题仍然存在

  • extract()
    $params
    的内容放入本地范围,其中包括视图文件。这让我有了

     <?=escape($foo)?>
    
    
    
    我的视图文件中的“标记”带有
    $params==['foo'=>'bar']
    。然而,诗篇并没有跟上这一点,并报告了许多未定义的全局变量问题

  • 我的问题:我如何告诉《诗篇》关于视图文件和变量的内容?或者,我如何重新构造这段代码,以便psalm可以为我测试它?

    在psalm的repo中有一个类似的演示:它在视图文件中查看docblock中的标签,如
    @variablesfrom ClassName::method
    ,并使它们在模板文件中可用。或者只是该方法中的
    $this
    变量的属性,不确定。诗篇中也提到了这一点

    或者,您可以将模板包装成一个最小的方法/函数,因为从技术上讲,视图只是一个接受一组变量并返回字符串的函数:

    
    

    这样,任何分析代码的工具(包括Psalm,但不限于)都可以理解它。

    从技术上讲,您的视图只是一个接受一组变量并返回字符串的方法。那么,为什么不把它变成像这里这样的方法呢?谢谢你的想法!是的,从技术上讲,这对我来说是可行的。我有点犹豫,因为它看起来像很多OOP样板,而我想要的只是一点好的老式标签汤PHP和
    include_once“partial/component.PHP”以某种可控的方式。我想,诗篇是一个错误的工具来检查意见呢?不过,检查代码中的OOP部分,它就像一个符咒。但也许我会尝试使用skrewdriver来处理钉子…再仔细想想,也许我可以用简单的函数最小化样板文件。。。类似于
    functionpart1(字符串$foo,int$bar){?>html……html