2016-08-01 29 views
1

我想写一个类,它将读取它构造的构造函数给出的路线。然而,即使经过1小时的Google搜索,我也没有找到任何如何访问Laravel Controller的getRouter方法 - 因为it's a static function。 我尝试过很多事情,但大部分时间我得到了以下错误:如何在PhpSpec中访问Laravel Controller的静态属性?

Uncaught Error: Using $this when not in object context in
vendor/phpspec/prophecy/src/Prophecy/Doubler/Generator/ClassCreator.php(49) :
eval()'d code:13
Stack trace: #0 [internal function]: Double\Illuminate\Routing\Controller\P4::getRouter()

我怎样才能做到这一点或者这只是不可能PhpSpec?

我的规格:

use Illuminate\Routing\Controller; 
use PhpSpec\ObjectBehavior; 
use Prophecy\Argument; 

class OptionDescriberSpec extends ObjectBehavior 
{ 

    function let(Controller $controller) 
    { 
     $this->beConstructedWith($controller); 
    } 

    function it_should_read_the_aviable_routes_of_the_controller() 
    { 
     $this->getController()->getRouter()->shouldReturn('Router'); 
     $this->render()->shouldReturn('Router'); 
    } 
} 

我的班级:

use Illuminate\Routing\Controller; 

class OptionDescriber 
{ 

    /** 
    * @var Controller 
    */ 
    protected $controller; 

    /** 
    * OptionDescriber constructor. 
    * 
    * @param Controller $controller 
    */ 
    public function __construct(Controller $controller) 
    { 
     $this->controller = $controller; 
    } 

    public function render() 
    { 
     return $this->controller->getRouter(); 
    } 
} 

回答

0
function it_should_read_the_aviable_routes_of_the_controller(Controller $controller, Router $router) 
{ 
    $this->getController()->willReturn($controller); 
    $controller->getRouter()->willReturn($router); 

    $this->render()->shouldReturn($router); 
} 

Alltough我们不推荐符合规格的控制器。使控制器尽可能薄,并将“肉”移动到控制器使用的服务中。

相关问题