将文件中的函数导入 Symfony 中的类控制器的问题

Posted

技术标签:

【中文标题】将文件中的函数导入 Symfony 中的类控制器的问题【英文标题】:Problem to import a function in a file to a class controller in Symfony 【发布时间】:2020-03-20 23:14:55 【问题描述】:

我想将我的函数 handleParameters() 添加到我的 AuthController 中,但我有“期望找到一个类......同时从资源导入服务......但它没有找到!”

HandleParameters.php

<?php 
   function handleParameters(array $aRequired, &$aRes, $requestMethod) ...
?>

AuthController.php

<?php
class AuthController extends Controller 

   public function getAuth() 
   
     require_once (dirname(__DIR__, 1) .'/Common/HandleParameters.php');
     handleParameters($aRequired, $this->aRes, $_SERVER['REQUEST_METHOD']);
     ...
   

【问题讨论】:

消息来自 autowire,默认情况下,它会尝试打开它遇到的任何 php 文件并连接里面的类。只需将 HandleParameters.php 添加到 config/services.yaml 中的忽略部分。虽然跑题了,但实际上没有理由去做你在 Symfony 应用程序中所做的事情。 我正在学习 Symfony,所以如果您有其他更好的解决方案,我很乐意听取您的意见。我可以将 handleParameters 函数放入 AuthController 但因为它是其他 web 服务类的共享函数,所以我想将它分离到另一个文件中。 【参考方案1】:

你可以使用 trait,例如: - 在 src/ 中创建一个 Tool/ 文件夹。 - 在此文件夹中创建一个文件HandleParametersTrait.php,名称必须以Trait结尾。HandleParametersTrait.php

<?php

namespace App\Tool;

trait HandleParametersTrait 
  public function handleParameters($message) 
    echo $message;
  

AuthController.php

<?php

namespace App\Controller;

use App\Tool\HandleParametersTrait;

class AuthController extends Controller 

   use HandleParametersTrait;

   public function getAuth() 
   
     $this->handleParameters('hi');
     ...
   

【讨论】:

谢谢亚辛。我想过,但我的厨师希望它是一个简单的php函数,所以我正在寻找解决方案。【参考方案2】:

默认情况下你所有的 php 文件必须是一个类所以如果你有错误

“期望找到一个类”

这是因为你的 HandleParameters.php 不是一个类

你有两个解决方案。

如果函数特定于您的 AuthController,您可以在控制器类中定义它,就像定义 getAuth() 一样。

否则:另一种方法是将特定的class MyService 定义为服务,然后您可以将该服务注入到您想要的任何类的构造函数中。

【讨论】:

以上是关于将文件中的函数导入 Symfony 中的类控制器的问题的主要内容,如果未能解决你的问题,请参考以下文章

从 Symfony 控制器中的值获取 Id

从另一个文件中的类导入函数?

Symfony中的API版本控制

无法将 Java 项目中的类文件导入同一项目中的另一个类文件

Symfony |如何从控制器中的存储库访问自定义方法?

symfony如何解析和使用注释