Laravel 4 facade类不在外观根类上调用函数

时间:2013-06-13 20:20:24

标签: laravel laravel-4 facade

我通过artisan workbench命令在laravel 4中设置了一个包。我创建了一个facade类,然后跟着this tutorial提出了以下服务提供者,facade和root类:

的src / Spoolphiz / Infusionsoft / InfusionsoftServiceProvider.php:

namespace Spoolphiz\Infusionsoft;
use Illuminate\Support\ServiceProvider;

class InfusionsoftServiceProvider extends ServiceProvider {

    protected $defer = false;

    /**
     * Bootstrap the application events.
     *
     * @return void
     */
    public function boot()
    {
        $this->package('spoolphiz/infusionsoft');
    }

    /**
     * Register the service provider.
     *
     * @return void
     */
    public function register()
    {   
        // Register 'infusionsoft' instance container to our Infusionsoft object
        $this->app['infusionsoft'] = $this->app->share(function($app)
        {
            return new Spoolphiz\Infusionsoft\Infusionsoft;
        });
    }

    /**
     * Get the services provided by the provider.
     *
     * @return array
     */
    public function provides()
    {
        return array();
    }

}

的src / Spoolphiz / Infusionsoft /墙面/ Facade.php:

namespace Spoolphiz\Infusionsoft\Facades;

use Illuminate\Support\Facades\Facade;

class Infusionsoft extends Facade {

    /**
     * Get the registered name of the component.
     *
     * @return string
     */
    protected static function getFacadeAccessor() { return 'infusionsoft'; }

}

最后,我在src / Spoolphiz / Infusionsoft / Infusionsoft.php上设置了要连接到外观的基础类:

namespace Spoolphiz\Infusionsoft;

//use Spoolphiz\Infusionsoft\iSDK;
/*
This is hackish and a un-laravel way to handle the requirement of \iSDK but unfortunately the xmlrpc3.0 lib doesn't want to correctly encode values when run with a namespace. Will try to resolve this later.
*/
require_once(__DIR__.'/isdk.php');

class Infusionsoft extends \iSDK {

    protected $_app;

    /**
    * Init the sdk
    * 
    */
    public function __construct( $connectionName )
    {           
        $this->_app = parent::cfgCon($connectionName);
    }

    public function test()
    {
        dd('works');
    }
}

我在app / config / config.php中设置了Infusionsoft的服务提供者和外观别名。 当我尝试针对Spoolphiz \ Infusionsoft \ Facade \ Infusionsoft的实例运行属于扩展iSDK类的方法时,我得到未定义的方法错误,如下所示:

调用未定义的方法Spoolphiz \ Infusionsoft \ Facades \ Infusionsoft :: loadCon()

这是为什么?外观的重点是能够根据其根类调用方法......

1 个答案:

答案 0 :(得分:3)

看起来我很蠢。我正在laravel工作台上开发这个软件包。完成后我将其提交给packagist并在同一个laravel应用程序中设置它的要求。将软件包安装在供应商目录和工作台中会导致某种冲突。

获得的经验教训:确保您的工作台和应用程序的供应商目录中没有相同的软件包。