Php 对空成员函数的调用,电话验证服务
使用Symfony框架的PHP: 首先,在上下文之前: 我的输入表单正在由表单生成器生成。那里没有什么问题。所以这不是问题所在 我正在做一个短信验证系统。我有一个控制器和两个服务validatorservice,smsapifor api调用现在我的验证服务如下所示:Php 对空成员函数的调用,电话验证服务,php,symfony,Php,Symfony,使用Symfony框架的PHP: 首先,在上下文之前: 我的输入表单正在由表单生成器生成。那里没有什么问题。所以这不是问题所在 我正在做一个短信验证系统。我有一个控制器和两个服务validatorservice,smsapifor api调用现在我的验证服务如下所示: class ValidatorService { public function validate($telefoonnummer) { $pregpatternNL = '(^\+[0-9]{2}|^\+[0-9]{2
class ValidatorService
{
public function validate($telefoonnummer)
{
$pregpatternNL = '(^\+[0-9]{2}|^\+[0-9]{2}\(0\)|^\(\+[0-9]{2}\)\(0\)|^00[0-9]{2}|^0)([0-9]{9}$|[0-9\-\s]{10}$)';
if (!preg_match($pregpatternNL, $telefoonnummer)) {
return false;
} else {
return true;
}
}
}
然后我的家庭控制器:
use App\Service\ValidatorService;
class HomeController extends AbstractController
{
/** @var SmsApi */
private $smsApi;
/** @var validatorService */
private $validatorService;
public function __construct1(SmsApi $smsApi, Validatorservice
$validatorService)
{
$this->smsApi = $smsApi;
$this->validatorService = $validatorService;
}
/**
* @Route("/")
* @Template()
*
* @param Request $request
*
* @return array
*/
public function indexAction(Request $request)
{
$form = $this->createForm(
SmsLogFormType::class,
new SmsLog(),
[
'method' => 'post',
]
);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
/** @var SmsLog $smslog */
$formData = $form->getData();
try {
$telefoonnummer = $formData->getTel();
$telefoonnummer = preg_replace('/[^0-9]/', '', $telefoonnummer);
$validatorservices = $this->validatorService-
>validate($telefoonnummer);
if ($validatorserviceres === false) {
$this->addFlash(
'notice',
'telefoonnummer onjuist formaat'
);
exit;
} else {
blablabla
}
现在,无论我尝试什么,我都会得到错误:
调用成员函数验证为空
起初,我认为这可能和构造函数名有关,但在网上发现这一点都不重要,而且我在那个里也并没有收到任何代码错误
然后我尝试在我的服务中向if语句添加echo。可能return true或false被视为null,但这也不起作用。我想这是因为每个构造函数的参数数量。如果为一个类定义了多个构造函数,它们应该具有不同的参数计数 您可以做的是检查您收到的对象是否是所需类的一部分。 或者创建静态函数,用不同的对象类型来稳定类 编辑 使用默认的自动布线机制:
private $smsApi;
private $validatorService;
public function __construct(SmsApi $smsApi, ValidatorService $validatorService)
{
$this->smsApi = $smsApi;
$this->validatorService = $validatorService;
}
我想这是因为每个构造函数的参数数量。如果为一个类定义了多个构造函数,它们应该具有不同的参数计数 您可以做的是检查您收到的对象是否是所需类的一部分。 或者创建静态函数,用不同的对象类型来稳定类 编辑 使用默认的自动布线机制:
private $smsApi;
private $validatorService;
public function __construct(SmsApi $smsApi, ValidatorService $validatorService)
{
$this->smsApi = $smsApi;
$this->validatorService = $validatorService;
}
如果您将代码更改为:
/** @var SmsApi */
private $smsApi;
private $validatorService;
public function __construct(SmsApi $smsApi, ValidatorService $validatorService)
{
$this->validatorService = $validatorService;
$this->smsApi = $smsApi;
}
如果您将代码更改为:
/** @var SmsApi */
private $smsApi;
private $validatorService;
public function __construct(SmsApi $smsApi, ValidatorService $validatorService)
{
$this->validatorService = $validatorService;
$this->smsApi = $smsApi;
}
__construct1和_construct2不是php的本机函数,因此在加载类时,构造函数不会调用,validatorService/smsApi也不会被设置为null。本机函数称为uu构造
/** @var SmsApi */
private $smsApi;
private $validatorService;
public function __construct(SmsApi $smsApi, ValidatorService $validatorService)
{
$this->smsApi = $smsApi;
$this->validatorService = $validatorService;
}
或者,如果不起作用,则将服务作为arg注入
public function indexAction(Request $request)
所以
并使用$validatorService->validate \uuuu construct1和\uuuu construct2不是php的本机函数,因此加载类时,构造函数不会调用,validatorService/smsApi也不会被设置为null。本机函数称为uu构造
/** @var SmsApi */
private $smsApi;
private $validatorService;
public function __construct(SmsApi $smsApi, ValidatorService $validatorService)
{
$this->smsApi = $smsApi;
$this->validatorService = $validatorService;
}
或者,如果不起作用,则将服务作为arg注入
public function indexAction(Request $request)
所以
并使用$validatorService->validate 您可以在调用方法之前尝试转储服务。你们的施工人员在工作吗?我不知道您可以定义多个,symfony可以处理DI。这至少与您的错误相匹配,因为类变量仍然为null。编辑:顺便说一句,为什么不直接在表单中使用验证?@WhiteRabbit php.net表明这是可能的。我想不出任何其他方法来解决这个问题。PHP不支持多个构造函数,是的,名称非常重要。你误读了什么,或者有人在跟你开玩笑。只需使用一个带两个参数的构造函数。PHP不太喜欢多态性。我在我的应用程序中做了一个快速测试,如果我按照你的方式尝试,我的服务不会自动连接。为什么不使用standart\uuu构造方法?可以在调用该方法之前尝试转储服务。你们的施工人员在工作吗?我不知道您可以定义多个,symfony可以处理DI。这至少与您的错误相匹配,因为类变量仍然为null。编辑:顺便说一句,为什么不直接在表单中使用验证?@WhiteRabbit php.net表明这是可能的。我想不出任何其他方法来解决这个问题。PHP不支持多个构造函数,是的,名称非常重要。你误读了什么,或者有人在跟你开玩笑。只需使用一个带两个参数的构造函数。PHP不太喜欢多态性。我在我的应用程序中做了一个快速测试,如果我按照你的方式尝试,我的服务不会自动连接。你为什么不使用标准构造法呢?好吧,我不知道第一种。不管怎样,两个构造函数都只需要一个参数…@JornBarkhof我想用多个构造函数是不可能实现你的目标的。改用一个,并为您的类键入check。PHP是动态的,不能像你所希望的那样处理你的情况。谢谢,我现在把它变成了一个构造函数。但我仍然得到相同的错误修复它,缓存清除,现在它的工作,非常感谢!啊,好吧,我真的不知道第一个。不管怎样,两个构造函数都只需要一个参数…@JornBarkhof我想用多个构造函数是不可能实现你的目标的。改用一个,并为您的类键入check。PHP是动态的,不能像你所希望的那样处理你的情况。谢谢,我现在把它变成了一个构造函数。但我还是遇到了同样的错误修复了它,缓存c
已经学习,现在可以使用了,非常感谢!是的,谢谢,我在1分钟前就已经想到了这个问题,但仍然得到了相同的错误清除本地缓存并检查您的类是否注册为service:php bin/console debug:container或debug:autowiring您应该找到一个带有类名称空间的条目是的,谢谢,我在1分钟前就想到了这个问题,仍然会出现相同的错误请清除本地缓存并检查您的类是否注册为service:php bin/console debug:container或debug:autowiring您应该找到一个具有类名称空间的条目