Я пытаюсь создать начальное число базы данных в laravel, которое использует heredoc, чтобы установить структуру xml в переменную, а затем использовать эту переменную в качестве одного из значений в начальном числе:
class CodeTableSeeder extends Seeder {
public function run()
{
DB::table('code')->delete();
$xml = <<<RawXML
<?xml version="1.0"?>
<fmxmlsnippet type="FMObjectList">
...
RawXML;
Code::create(array('user_id' => 1, 'code' => $xml));
}
}
Когда я запускаю сеялку, я получаю сообщение об ошибке от ремесленника:
Seeded: UserTableSeeder
[ErrorException]
Undefined variable: searchValue
я знаю это searchValue
находится в коде XML:
<Script includeInMenu="True" runFullAccess="False" id="1" name="Perform a Find (searchValue, searchField, LayoutName)">
Похоже, что клиент базы данных читает XML-документ как код, а не строку heredoc. Есть ли способ запретить читателю читать XML? Есть ли лучший способ включить XML в семя?
Не обязательно включать xml в семя, но было бы неплохо оставить дополнительный шаг в процессе установки для других разработчиков.
Вместо использования heredoc вы можете использовать nowdoc. Из документации:
Nowdocs для строк в одинарных кавычках это то же самое, что heredoc для строк в двойных кавычках. Nowdoc указывается аналогично heredoc, но внутри nowdoc анализ не выполняется.
Смотрите также этот ответ по deceze, который дает практический пример различия между этими двумя:
$foo = 'bar';
$here = <<<HERE
I'm here, $foo!
HERE;
$now = <<<'NOW'
I'm now, $foo!
NOW;
$ здесь — «Я здесь, бар!», а $ сейчас — «Я сейчас, $ foo!».
Других решений пока нет …