
Cadastro novo entra na tabela sem reclamar. Clico em Editar na grid, o form abre e todos os campos estão em branco, sem uma linha no var/log/exception.log. Quando dá isso eu nem olho o template: vou direto no getData() do DataProvider, porque quase sempre ele devolve o array com o índice errado.
public function getData()
{
if (isset($this->loadedData)) {
return $this->loadedData;
}
foreach ($this->collection->getItems() as $item) {
$this->loadedData[$item->getId()] = $item->getData();
}
$data = $this->dataPersistor->get('meumodulo_item');
if (!empty($data)) {
$item = $this->collection->getNewEmptyItem();
$item->setData($data);
$this->loadedData[$item->getId()] = $item->getData();
$this->dataPersistor->clear('meumodulo_item');
}
return $this->loadedData;
}O componente procura, dentro desse array, a chave igual ao id que veio na URL. Devolver [0 => $data] ou um array plano com os campos na raiz faz ele não achar nada e desenhar tudo vazio. O dataPersistor é a segunda metade: sem ele, um save reprovado na validação devolve o form limpo e o usuário perde o que digitou.
<!-- view/adminhtml/ui_component/meumodulo_item_form.xml -->
<dataSource name="item_form_data_source">
<settings>
<submitUrl path="meumodulo/item/save"/>
</settings>
<dataProvider class="VendorModuloModelItemDataProvider" name="item_form_data_source">
<settings>
<requestFieldName>item_id</requestFieldName>
<primaryFieldName>item_id</primaryFieldName>
</settings>
</dataProvider>
</dataSource>
<fieldset name="general">
<field name="titulo" formElement="input">
<settings>
<dataType>text</dataType>
<dataScope>titulo</dataScope>
</settings>
</field>
</fieldset>O requestFieldName é o parâmetro da URL de edição, aquele /edit/item_id/7. Se ele não for a mesma coluna que o getId() devolve, o provider carrega a coleção e o form continua sem par. Já o dataScope do campo é relativo ao <dataScope>data</dataScope> declarado no settings do form: se você aninhou o array embaixo de outra chave e não declarou isso, o campo procura no lugar errado. Depois de mexer no XML, sudo -u www-data php bin/magento cache:flush, senão você fica corrigindo código que o Magento nem releu.
Se travou nisso e precisa de ajuda, me chama aqui.
O meta está no banco mas some do /wp-json/wp/v2/posts. Veja o register_post_meta certo, com single, type, schema de array e…
Escreva 31 de agosto de 2026 em PHP 8.3 sem aquele array com os doze meses, usando IntlDateFormatter com pattern…
Listagem de CPT com meta_query que demora segundos: veja o EXPLAIN da query do WP_Query e o índice composto em…
Post com Perdeu o agendamento e backup que não roda há dias: inspecione a fila do WP-Cron, apague a trava…
Como aposentar o plugin AMP sem transformar centenas de URLs /amp/ indexadas em 404: o rewrite 301 no nginx, a…
A loja cai com OOM command not allowed when used memory > maxmemory: ajuste a maxmemory-policy do Redis e separe…