2015-01-03 124 views
2

我在Symfony 2包中使用Alice來加載燈具。我正在嘗試使用父實體的名稱來定製實體的名稱。具體來說,我有一個實體,@Report1,其@Report1->name財產返回Test Report 1使用hautelook/AliceBundle中的字符串連接對象屬性

我正在嘗試創建名稱爲Test Report 1 Scenario 1的子實體。這是我的固定文件片段:

AppBundle\Entity\Scenario: 
    Scenario1: 
    report_id: @Report1->id 
    name: @Report1->name 'Scenario 1' 

所有我得到的回覆是字面@Report1->name 'Scenario 1'

如果我從name:屬性中刪除'Scenario 1'字符串,我會得到父級報告的實際名稱。

+0

原來愛麗絲實現是在GitHub的'nelmio/alice' –

+0

您是否嘗試過創建用於連接字符串的自定義數據提供程序? https://github.com/nelmio/alice#custom-faker-data-providers – Ziumin

+0

尚未,但謝謝你的提示。我會研究它並在此發佈結果。 –

回答

5

我正在使用hautelook/alice-bundle 1.3.1(nelmio/alice 2.2.0和fzaninotto/faker 1.6.0)和php 5.6

您可以使用variable-length arguments list配置自定義數據提供程序並將其用於您的燈具文件。

在的appbundle/DataFixtures/ORM/DataLoader.php:

namespace AppBundle\DataFixtures\ORM; 

use Hautelook\AliceBundle\Doctrine\DataFixtures\AbstractLoader; 

class DataLoader extends AbstractLoader 
{ 
    /** 
    * {@inheritdoc} 
    */ 
    public function getFixtures() 
    { 
     return [ 
      __DIR__.'/../Fixtures/user.yml', 
     ]; 
    } 

    public function concat(...$strings) 
    { 
     $result = ''; 

     foreach ($strings as $string) { 
      $result .= $string; 
     } 

     return $result; 
    } 
} 

現在你可以使用像這樣的自定義數據提供。

在的appbundle/DataFixtures /夾具/ user.yml:

AppBundle\Entity\User: 
    user-{1..10}: 
     firstname: <firstname()> 
     lastname: <lastname()> 

     email: <concat(@self->firstname, ".", @self->lastname, "@gmail.com")> 
     plainPassword: 123 
     username: <concat(@self->firstname, ".", @self->lastname)> 

這是一個有點乏味寫的,但它的工作原理。

而對於到PHP 5.6之前,PHP版本,你可以用func_get_args()獲得的參數列表中DataLoader.php,像這樣:

public function concat() 
    { 
     $result = ''; 

     foreach (func_get_args() as $string) { 
      $result .= $string; 
     } 

     return $result; 
    } 
+0

這個作品 - 謝謝! –