【发布时间】:2015-12-21 02:51:45
【问题描述】:
这是我第一次使用 Laravel 的 Facades 和 Service Providers(我在 Laravel 5 上)。
我有这个ServiceProvider:
<?php namespace App\Providers;
...
class AccessServiceProvider extends ServiceProvider {
public function register() {
$this->app->alias('access', 'App\Services\Permissions\Permissions');
$this->app->bindShared('access', function() {
return new Permissions();
});
return new App\Services\Permissions\Permissions();
}
public function provides(){
return ['App\Services\Permissions\Permissions'];
}
}
我的权限类如下所示:
<?php namespace App\Services\Permissions;
class Permissions{
private $permissions;
public function __construct(){
$this->permissions = [
"AssignQuotes" => new CanAssignQuotesPermission()
];
}
public function hasPermission($permission, $user){
return $this->permissions[$permission]->canDo($user->role_id);
}
}
我将此添加到我的aliases app.php:
'Access' => 'App\Services\Permissions\Access'
我在 app.php 中将此添加到我的providers:
'App\Providers\AccessServiceProvider',
我创建了这个Facade 类:
<?php namespace App\Services\Permissions;
use Illuminate\Support\Facades\Facade;
class Access extends Facade {
protected static function getFacadeAccessor() { return 'access'; }
}
根据我的理解,我注册了一个别名,该别名指向一个 Facade 类,该类引用指向一个类的绑定。
我在 app.php 中注册的 ServiceProvider 中注册了绑定。
现在在我的路由文件中,我正在使用以下代码进行测试:
Route::get('test', function(){
$user = User::find(1);
$access = Access::hasPermission("AssignQuotes", $user);
return "test";
}
但是我收到了这个错误:
FatalErrorException in Facade.php line 213:
Call to undefined method App\Services\Permissions\Access::hasPermission()
【问题讨论】:
-
Laravel 5。很抱歉没有包括在内。我已经编辑了我的帖子
-
尝试在 Facade.php 的第 213 行中使用
get_class来查看那里有什么样的对象。 -
当我使用
get_class时,我得到:App\Services\Permissions\Access。我应该得到其他类还是外观类? -
$instance绝对应该是@987654337@ 的一个实例,因为这是带有hasPermission方法的类。__callStatic拦截对 Facade 上不存在的静态方法的调用并将其传输到底层实例。 -
@bernie 你是对的......当我调用 get_class 现在它正在工作时,它会返回 Permissions 类。
标签: laravel-5 service-provider laravel-facade