我在 OpenEMR 中的第一个 Symfony 2.4 组件控制器

Posted

技术标签:

【中文标题】我在 OpenEMR 中的第一个 Symfony 2.4 组件控制器【英文标题】:My first Symfony 2.4 component controller inside OpenEMR 【发布时间】:2020-02-09 00:15:23 【问题描述】:

我正在现有的应用程序 OpenEMR 中构建。我正在努力为构建报告奠定基础。我按照本教程中的说明进行操作。

https://symfony.com/doc/2.8/page_creation.html#creating-a-page-route-and-controller

在编写此帮助请求时。我找到了这个答案。

My first controller in symfony

我将建议的 routing.yml 添加到程序的配置中,错误没有改变。它仍在产生此错误。

 [11-Oct-2019 08:23:43 America/New_York] php Fatal error:  Uncaught Error: 
  Class 'OpenEMR\Finance\Reports\financialSummaryByInsurance' not found in 
   C:\oerm_dev\www\dev\mindfulemr4\interface\reports\insurance.php:5
    Stack trace:#0 main thrown in C:\oerm_dev\www\dev\mindfulemr4\interface\reports\insurance.php on line 5

所以,我采取的步骤是这些。我编辑了 composer.json 以添加命名空间。在下面添加中间行后,我使用 dumpautoloader -o 重新加载了作曲家。

        "OpenEMR\\Billing\\" : "library/billing/src",
        "OpenEMR\\Finance\\Reports\\" : "library/financialReports/src",
        "OpenEMR\\Pdf\\" : "library/pdf/src",

我使用

安装了路由组件
   composer require symfony/routing 2.4

我使用 PHPStorm 来帮助命名和创建类。

    namespace OpenEMR\Finance\Reports;   //This will function as my controller event though not named controller

    use Symfony\Component\HttpFoundation\Response;
    use Symfony\Component\Routing;                          //Making use of Symfony routing

    class financialSummaryByInsurance                      //Class controller name without the word controller
    
        public function insurancepaid()
        
            /**
             * @Route("/library/financialReports/src/financialSummaryByInsurance/insurancepaid", name = "insurancepaid")
             */
            return new Response("insurance data here my first controller from scratch"  );
        

    

然后,我想建立一个页面来调用控制器来显示来自控制器的信息。该文件名为 insurance.php,内容为。

    use OpenEMR\Finance\Reports\financialSummaryByInsurance;

    $show = new financialSummaryByInsurance;

    echo $show->insurancepaid();

PHPStorm 能够在 insurance.php 文件中找到并建议每个组件。这就是为什么我对错误日志中的错误消息感到困惑。在把这个框架从一楼弄下来的过程中,我一定遗漏了一些东西。

【问题讨论】:

你的“require vendor/autoload.php”行在哪里? 控制器类的名称需要在它的末尾有“控制器”这个词。 你能确认类financialSummaryByInsurance位于library/financialReports/src/financialSummaryByInsurance.php吗?如果不是,这可能是您的Class ... not found 错误的原因。如果是,请确保 composer 中的自动加载已更新,例如使用composer dump-autoload,正如 Theva 的回答中所建议的那样 @dbrumann 很确定他们正在尝试独立做一些事情,并且他们实际上根本不需要 autoload.php 文件。太糟糕了,他们变黑了。 是的,library/financialReports/src/financialSummaryByInsurance.php 在那个文件夹中。我检查了两者的拼写两次。我发现一个拼写错误。 【参考方案1】:

要显示从控制器 financialSummaryByInsurance 返回的页面,您必须使用与您定义的 insurancepaid 路由匹配的 HTTP 请求调用它。

控制器只是一个 PHP 类,如果您实例化它,它不会向您显示 html 页面。

如果您调用GET http://yourdomain/library/financialReports/src/financialSummaryByInsurance/insurancepaid

【讨论】:

【参考方案2】:

似乎找不到类错误。

尝试执行 composer dump-autoload重新生成自动加载文件

我发现你的路由类不对,应该是这个

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;

参考:https://symfony.com/doc/2.8/controller.html

【讨论】:

这并没有解决问题。我确实把它放进去只是为了看看会发生什么。没有快乐。 你可以尝试在你的composer.json中修改这一行为“psr-4”:“”:“src/”,然后运行composer dump-autoload Theva——我想通了。这是骆驼案。我必须将文件名的第一个字母和类的第一个字母大写。一些简单的事情。

以上是关于我在 OpenEMR 中的第一个 Symfony 2.4 组件控制器的主要内容,如果未能解决你的问题,请参考以下文章

在 Symfony 中的第一个错误上停止对象属性验证有多漂亮?

Symfony2:KnpPaginator 仅显示带有 POST 表单的第一页

Symfony2名称空间的文档

Symfony路由配置教程已开课

Symfony:嵌入式表单集合中的独特选项

Symfony 2 树枝拆分功能未按预期工作