facade的问题

1.在app/下创建
Ftest/Tester/Facade/TesterFacade .php
<?php namespace Ftest\Tester\Facade;

class TesterFacade extends \Illuminate\Support\Facades\Facade
{

protected static function getFacadeAccessor() { return 'tester'; }

}

2.app/Ftest/Tester/tester.php
<?php namespace Ftest\Tester;

class Tester{
  public function test(){
       return 'facade test';
  }

}

3.app/Ftest/Tester/TesterServiceProvider.php
<?php namespace  Ftest\Tester;


class TesterServiceProvider extends \Illuminate\Support\ServiceProvider{


protected $defer = false;

/**
 * Register the service provider.
 *
 * @return void
 */
public function register()
{

    $this->app->bind('tester', function()
    {
        return new Tester;
    });
}

}

4.在app.php中添加了
providers
'Ftest\Tester\TesterServiceProvider' 
aliases
'Tester'           => 'Ftest\Tester\Facade\TesterFacade'

autoload;

5.在controller中测试

echo Tester::test();

出错!!!
Symfony \ Component \ Debug \ Exception \ FatalErrorException

Call to undefined method Ftest\Tester\Facade\TesterFacade::test()

如果 写上
App::bind('tester',function(){

  return  \Ftest\Tester\Tester;
});

Tester::test();

正确!

怎么破!!!
已邀请:

mvc999

赞同来自: kkkdd FiveSay

好好研究命名空间,和自动加载机制 ,再laravel中没有限制,你的问题将会迎刃而解,不管把 ServiceProvider 放在哪里都没问题!!!

还有你给的例子:

1.在app/下创建
Ftest/Tester/Facade/testFacade.php

<?php
namespace Ftest\Tester\Facade;

class TesterFacade extends \Illuminate\Support\Facades\Facade
{
protected static function getFacadeAccessor() { return 'tester'; }
}

名字都写错了

kkkdd - phper

赞同来自: 安正超

@mvc999

仔细看了一下php.net手册上的介绍。非常感谢! :smile:

kkkdd - phper

赞同来自:

解决... 置于顶层的命名空间.....
<?php namespace  App\Providers;


class TesterServiceProvider extends \Illuminate\Support\ServiceProvider{


protected $defer = false;

/**
 * Register the service provider.
 *
 * @return void
 */
public function register()
{

    $this->app->bind('tester', function()
    {
        return new \Ftest\Tester\Tester;
    });
}


}

话说我写的这个为什么没有起作用?
“”Ftest/Tester/TesterServiceProvider“”

求教...

要回复问题请先登录注册