Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Matheus P.

Adicionar campo dinamicamente com cakePHP

Recommended Posts

Pessoal, preciso fazer uma tela de venda e estou cada vez mais empacado nessa parte, com jQuery eu consigo adicionar/remover campos dinamicamente para aparecer no HTML, mas ao salvar o formulário, é salvo apenas uma linha e com informações erradas.

 

jQuery

    var count = 1;
    var campo = document.getElementById("copyhash").value;

    $( "#duplicar" ).click(function() {
        $( "#fields" ).append(
            '<div id="item" class="col-md-12 item">' +

            '<input id="copyhash" value="'+ campo +'" type="hidden" name="data[Item]['+ count +'][sale_hash]"/>' +

            '<div class="form-group">' +
            '<div class="col-md-4 col-xs-12">' +
            '<div class="input-group">' +
            '<span class="input-group-addon"><span class="fa fa-folder-open"></span></span>' +
            '<select name="data[Item]['+ count +'][product_id]" class="form-control select2" required="required" id="SalePredated">' +
            '<option value="">Selecione um produto...</option>' +
            '<option value="1">Acessório</option>' +
            '<option value="2">Bermuda</option>' +
            '<option value="3">Blusa</option>' +
            '<option value="4">Bolsa</option>' +
            '<option value="5">Calça</option>' +
            '<option value="6">Cinto</option>' +
            '<option value="7">Macacão</option>' +
            '<option value="8">Regata</option>' +
            '<option value="9">Saia</option>' +
            '<option value="10">Vestido</option>' +
            '</select>' +
            '</div>' +
            '</div>' +

            '<div class="col-md-4 col-xs-12">' +
            '<div class="input-group">' +
            '<span class="input-group-addon"><span class="fa fa-info"></span></span>' +
            '<input name="data[Item]['+ count +'][descricao]" placeholder="Detalhes" class="form-control" maxlength="10" type="text" id="SalePredated"/>' +
            '</div>' +
            '</div>' +

            '<div class="col-md-3 col-xs-12">' +
            '<div class="input-group">' +
            '<span class="input-group-addon"><span class="fa fa-money"></span></span>' +
            '<input name="data[Item]['+ count +'][amount]" placeholder="0,00" class="form-control" required="required" maxlength="10" type="text" id="SalePredated"/>' +
            '</div>' +
            '</div>' +

            '<div class="col-md-1 col-xs-12">' +
            '<div class="remover input-group">' +
            '<span class="fa fa-close" style="cursor: pointer; color: #ff6218; font-size: 28px; text-align: right;"></span>' +
            '</div>' +
            '</div>' +
            '</div>' +
            '</div>');

        count++;
    });

});

Sales Controller

$data = $this->request->data['Item'];
$this->Item->saveMany($data);

É basicamente isso, ele pode adicionar e remover itens com jQuery, mas preciso que o PHP entenda isso e aceite para adicionar vários itens relacionado com aquela venda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se não me engano um post anterior você tinha um problema parecido.

 

Coloque [] nos inputs

'<input name="data[Item]['+ count +'][descricao][]" placeholder="Detalhes" class="form-control" maxlength="10" type="text" id="SalePredated" />' 
...

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Se não me engano um post anterior você tinha um problema parecido.

 

Coloque [] nos inputs

'<input name="data[Item]['+ count +'][descricao][]" placeholder="Detalhes" class="form-control" maxlength="10" type="text" id="SalePredated" />' 
...

 

Ficando data[0][item][], data[1][item][]...? Isso é novidade para mim!

Notice (8): Array to string conversion [CORE\Cake\Model\Datasource\DboSource.php, line 1007]

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dá uma lida aí http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-savemany-array-data-null-array-options-array

 

Para usar o saveMany, os campos devem estar no formato.

$data = [
          ['NomeCampo' => 'valor'],
          ['NomeCampo' => 'valor'],
);


Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu já li e reli cada documento, tanto que empaquei nessa parte e só falta ela para completar uma venda

Faça as alterações que sugeri e poste aqui a saída de:

pr($this->request->data);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Colocando Item[0][id][] nem cadastra, se colocar Item[id][] ele cadastra somente uma linha com campos incorretos, do jeito que está, cadastra o primeiro normalmente, mas qualquer campo que foi inserido dinamicamente, o PHP não reconhece. Exemplo, se eu deixar dois campos já no HTML, ele vai cadastrar somente esses dois corretamente.

array(
	(int) 0 => array(
		'sale_hash' => 'f627b14b0bf85eab067f9e110e6af29d',
		'product_id' => '1',
		'descricao' => '123',
		'amount' => '1'
	)
)

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.