Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel-从扩展类重写父构造函数_Php_Laravel_Laravel 4 - Fatal编程技术网

Php Laravel-从扩展类重写父构造函数

Php Laravel-从扩展类重写父构造函数,php,laravel,laravel-4,Php,Laravel,Laravel 4,我正在从包中扩展控制器,以便在使用composer进行更新时编辑它并避免丢失更改。到目前为止,一切正常,但我有一个问题与构造函数 我原来的班级有: class UserRegisterService { public function __construct(UserSignupValidator $v = null) { //unrelated stuff here Event::listen('service.activated',

我正在从包中扩展控制器,以便在使用composer进行更新时编辑它并避免丢失更改。到目前为止,一切正常,但我有一个问题与构造函数

我原来的班级有:

class UserRegisterService
{


    public function __construct(UserSignupValidator $v = null)
    {
        //unrelated stuff here
        Event::listen('service.activated',
                      'Jacopo\Authentication\Services\UserRegisterService@sendActivationEmailToClient');
    }
}
扩展控制器是:

use Jacopo\Authentication\Services\UserRegisterService;
use Jacopo\Authentication\Validators\UserSignupValidator;


class CustomUserRegisterService extends UserRegisterService
{

    public function __construct(UserSignupValidator $v = null)
    {
        //unrelated stuff here
        Event::listen('service.activated',
                      'CustomUserRegisterService@sendActivationEmailToClient');
    }
我有基本相同的东西,我的扩展类的变化在里面CustomUserRegisterService@sendActivationEmailToClient(基本上,我想发送一封不同于原始控制器的电子邮件,使用mandrill和自定义模板)

事件正在触发,并且两个函数都被调用,因此当用户被激活时,我会收到一封重复的电子邮件(在本例中就是这个事件)。我只希望调用自定义类上的构造函数,而需要忽略另一个构造函数

这可能吗

编辑:根据评论中的建议,我对事件::listen进行了评论,这解决了问题,只发送了一封电子邮件。但当然,这并不能解决一个问题,即一旦我更新它就会被取消注释


添加返回假;在…的结尾CustomUserRegisterService@sendActivationEmailToClient也不起作用,只是在构造函数中注释了事件才起作用。

只要不调用CustomUserRegisterService类中的父::\uu构造(),UserRegisterService\uu构造将不会执行。但是您必须在CustomUserRegisterService类的构造函数中实现UserRegisterService中的“无关内容”

A类{
公共功能结构($v=”“)
{
呼应“A的构造函数”;
}
}
B类扩展了A类{
公共函数构造()
{
//父项::_构造();
回声“B的构造器”;
}
}

$b=新的b()我没有在CustomUserRegisterService中调用父构造函数,“不相关的东西”是变量,它们都在两个构造函数中。如果我理解正确,父构造函数不应该被执行?也许我在类的其余部分遗漏了其他内容,但我想说的是,事件正在启动两个函数swell,如果CustomUserRegisterService没有调用父构造函数,那么应该是其他内容。试着评论父类Event::listen,看看它是否仍在向您发送两封电子邮件。我在原始Event::listen中对事件进行了评论,但我只收到了一封电子邮件,所以我感到困惑。这两个构造函数都在这里执行。返回错误;damiani建议的也不起作用。假设您在子类中不是被调用的
父类::\u构造函数
,则不应触发父类的侦听器。父类
UserRegisterService
是否可能正在代码中的其他地方实例化?您确定是父侦听器触发,而不是子侦听器触发两次吗?(删除其中一个以进行检查。)最后,您可以从侦听器
返回false
,以停止事件传播(尽管最好弄清楚它发生的原因并解决它)。电子邮件是不同的(拥有自定义控制器的全部意义就在于此),因此我知道其中一个来自旧控制器,也许它不是来自构造函数,我将进一步测试和注释,感谢您在父构造函数中的输入,将事件侦听器更改为包含
throw new Exception()的闭包,然后回过头查看堆栈跟踪以查看触发事件的位置。我对父构造函数所做的任何更改都将在编写器更新后删除。这是主要的问题。不,这只是为了调试。通过这种方式,您可以准确地看到父构造函数中的侦听器是从何处调用的,并隔离是否在代码中的某个地方创建了父类
UserRegisterService
的实例。