Я тестирую cakephp 3.0.8, и у меня возникла проблема. Я пытаюсь добавить новые ингредиенты на нескольких языках одновременно, и для этого мне нужно, чтобы в моей форме был массив внутри поля «имя» и «слаг», содержащий язык и значение на этом языке для таблицы i18n. в базе данных. Но после patchEntity перед сохранением массив исчезает и я не понимаю почему.
Что я хочу:
[
'name' => [
'en_US' => 'Title',
'fr_CA' => 'Titre'
],
'slug' => [
'en_US' => 'Slug',
'fr_CA' => 'Slug Fr'
],
'season' => ''
]
Что у меня после patchEntity:
[
'name' => '',
'slug' => '',
'season' => ''
]
В моем IngredientController.php
public function add()
{
$ingredient = $this->Ingredients->newEntity();
if ($this->request->is('post')) {
debug($this->request->data);
$ingredient = $this->Ingredients->patchEntity($ingredient, $this->request->data);
$ingredient->locale = Configure::read('Config.locales');
debug($ingredient);die();
if ($this->Ingredients->save($ingredient)) {
$this->Flash->success(__('The ingredient has been saved.'));
return $this->redirect(['action' => 'index']);
} else {
$this->Flash->error(__('The ingredient could not be saved. Please, try again.'));
}
}
$this->set(compact('ingredient', 'recipes'));
$this->set('_serialize', ['ingredient']);
}
В моем объекте Ingredient.php
protected $_accessible = [
'name' => true,
'slug' => true,
'season' => true,
'recipe_count' => false,
'recipes' => false,
'*' => false
];
В моем IngredientsTable.php
public function validationDefault(Validator $validator)
{
$validator
->requirePresence('name', 'create')
->notEmpty('name');
$validator
->allowEmpty('slug');
$validator
->allowEmpty('season');
return $validator;
}
И, наконец, в моем представлении add.ctp
<div class="ingredients form large-10 medium-9 columns">
<?= $this->Form->create($ingredient) ?>
<fieldset>
<legend><?= __('Add Ingredient') ?></legend>
<?php
foreach ($locales as $lang) {
echo $this->Form->input('name.'.$lang, ['label' => 'Title ('.$lang.')']);
echo $this->Form->input('slug.'.$lang, ['label' => 'Slug ('.$lang.')']);
}
echo $this->Form->input('season');
?>
</fieldset>
<?= $this->Form->button(__('Submit')) ?>
<?= $this->Form->end() ?>
CakePHP generated all the code with the console except for the add.ctp that I modified a bit to have an array inside the "name" and "slug" fields. The var $locales only contain an array of the locales (en_US and fr_CA)
Благодарю вас!