2014-09-12 89 views
1

如何访问FeatureContext.php中的symfony参数(例如parameters.yml)?访问FeatureContext中的symfony参数

如果我在任何控制器中使用$this->getContainer()->getParameter('currency');,我可以得到这些值,并且我想用FeatureContext做同样的事情,那么如何才能使代码在可能的范围内?

在此先感谢

我想使这个例子工作,这种或那种方式:

namespace Football\TeamBundle\Features\Context; 

use Behat\MinkExtension\Context\MinkContext; 

class FeatureContext extends MinkContext 
{ 
    /** 
    * @Then /^I print currency$/ 
    */ 
    public function iSeeCurrency() 
    { 
     echo $this->getContainer()->getParameter('currency'); 
     sleep(60); 
    } 
} 

仅供参考;

use Behat\MinkExtension\Context\MinkContext; 
use Behat\Symfony2Extension\Context\KernelDictionary; 

class FeatureContext extends MinkContext 
{ 
    private $kernel; 
    use KernelDictionary; 

    public function setKernel($kernel) 
    { 
     $this->kernel = $kernel; 
    } 

    /** 
    * @Then /^I want to say hello to "([^"]*)"$/ 
    * @param $seconds 
    */ 
    public function iSayHello($name) 
    { 
     $container = $this->getContainer(); 
     $behatService = $container->get('behat_service'); 

     echo $behatService->sayHello($name); 
     sleep(60); 
    } 
} 

配置文件::我的这个例子来访问symfony的服务工作正常(我有_dev.yml和_prod.yml环境以及)

config.yml

imports: 
    - { resource: parameters.yml } 
    - { resource: security.yml } 
    - { resource: globals.yml } 

config_test.yml

imports: 
    - { resource: config.yml } 
    - { resource: parameters_test.yml } 

parameters_test.yml

parameters: 
    database_driver: pdo_mysql 
    database_host: 127.0.0.1 
    database_port: null 
    database_name: symfony_test 
    database_user: root 
    database_password: root 

globals.yml

parameters: 
    currency: EUR.USD.GBP 
+0

有你有相同的参数在每个环境中的文件? (prod/dev/test) – pbenard 2014-09-12 21:43:04

+0

我已经根据你的问题更新了上面的帖子。 – BentCoder 2014-09-12 22:16:20

回答

5

FEATURE背景

use Behat\MinkExtension\Context\MinkContext; 
use Behat\Symfony2Extension\Context\KernelDictionary; 

class FeatureContext extends MinkContext 
{ 
    private $kernel; 
    use KernelDictionary; 

    public function setKernel($kernel) 
    { 
     $this->kernel = $kernel; 
    } 

    /** 
    * @Then /^I access only currency parameter$/ 
    */ 
    public function printCurrency() 
    { 
     $container = $this->getContainer(); 
     echo $container->getParameter('currency'); 
    } 
} 
+0

好戏。 在Behat 3.x上试用成功。 运行时注意:AppBundle \ Features \ Context \ FeatureContext和Behat \ Symfony2Extension \ Context \ KernelDictionary在AppBundl e的组合中定义了相同的属性($ kernel) \功能\背景\ FeatureContext。这可能是不兼容的,为了提高可维护性,请考虑在特征中使用访问器方法。类是由错误组成的。 所以我只是从你的代码段中删除'private $ kernel'来解决这个错误。 – Ronan 2015-09-06 19:54:16