Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/286.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外部使用Illumb库时未调用引导方法_Php_Laravel_Illuminate Container - Fatal编程技术网

Php 在Laravel外部使用Illumb库时未调用引导方法

Php 在Laravel外部使用Illumb库时未调用引导方法,php,laravel,illuminate-container,Php,Laravel,Illuminate Container,我正在尝试使用外部拉威尔。通过遵循此回购协议,我成功地将雄辩的模型用于我的项目。但是,我设置了boot方法,然后没有调用它 封装器 <?php namespace App\Eloquent; use Illuminate\Container\Container; use Illuminate\Database\Capsule\Manager as Capsule; use Illuminate\Events\Dispatcher; class Encapsulator {

我正在尝试使用外部拉威尔。通过遵循此回购协议,我成功地将雄辩的模型用于我的项目。但是,我设置了boot方法,然后没有调用它

封装器

<?php  namespace App\Eloquent; 

use Illuminate\Container\Container;
use Illuminate\Database\Capsule\Manager as Capsule;
use Illuminate\Events\Dispatcher;

class Encapsulator
{
    private static $conn;

    private function __construct() {}

    static public function init()
    {
        if (is_null(self::$conn))
        {
            $capsule = new Capsule;

            $capsule->addConnection([
                'driver'    => 'mysql',
                'host'      => HOSTNAME,
                'database'  => DATABASE,
                'username'  => USERNAME,
                'password'  => PASSWORD,
                'charset'   => 'utf8',
                'collation' => 'utf8_unicode_ci',
                'prefix'    => PREFIX,
            ]);

            $capsule->setEventDispatcher(new Dispatcher(new Container));

            $capsule->setAsGlobal();

            $capsule->bootEloquent();
        }
    }
}
封装了eQuentBase.php

<?php  namespace App\Eloquent;

use Illuminate\Database\Eloquent\Model as Eloquent;

abstract class EncapsulatedEloquentBase extends Eloquent
{
    public function __construct(array $attributes = array())
    {
        Encapsulator::init();

        parent::__construct($attributes);
    }
}
User.php

<?php namespace App\Eloquent;

class User extends EncapsulatedEloquentBase
{

    protected static function boot() {
        parent::boot();
        echo 'hey boot!!'; // called!

        static::creating(function($node) {
            echo 'hey creating!!'; // never called!
        });
    }
}

我可以使用模型,但不调用注册方法。我想问题是我没有正确设置EventDispatcher,但我不知道如何设置。请帮帮我

我已经解决了我的问题。关键的一点是,不要在每个新的雄辩模型中创建新的封装器实例。 在中,我扩展了用于用户模型的封装雄辩库,所以当我创建两个用户并执行某些操作时,它们是不同的。这就造成了问题

因此,解决方案是让用户扩展Illumb\Database\Eloquent\Model

<?php namespace App\Eloquent;

use Illuminate\Database\Eloquent\Model;

class User extends Model
{
Encapsulator::init();
User::create(['name' => 'John']);