Esta situação não se refere especificamente ao Yii, mas gostaria de saber quais as soluções que vocês utilizam para evitar inserts duplicados. Em um crud padrão do yii por exemplo, se o usuário clicar repetidas vezes no botão salvar ao inserir um registro, ele será duplicado.
Vejo as seguintes opções:
bloquear o botão inserir ao clicar a primeira vez -> mas se o link oscilar, o usuário não conseguirá reenviar o formulário;
fazer um select para verificar se o registro já existe -> penso ser pesado, principalmente ao utilizar uma aplicação de alto tráfego, onde teremos mysql replicado para separação de bases para inserts e selects (que é meu caso);
Legal Aryel, esta é uma boa prática que evita problemas com o botão voltar do navegador. Já passei por isso no passado e contornei com ‘redirect’ (ou mesmo o ‘header’ do php quando não usava framework).
Mas mesmo assim ainda consigo inserir vários registros simplesmente clicando feito um louco no botão cadastrar do crud… ou seja, o php acaba recebendo várias requisições http e tratando todas elas (fazendo inserts duplicados).
Quando o cliente clicar, você desativa o botão. Se houver alguma instabilidade no sistema, se caso ocorrer, colocar um setTimeout() de 30 segundos, se o formulário não submeter em 30 segundos o botão volta a ser ativado.