Ir para conteúdo
Fórum Script Brasil
  • 0

O arquivo csv


Frank K Hosaka

Pergunta

Há muito tempo, eu consegui esse código para criar o arquivo csv no PHP e no Laravel

<?php
// listagem parcial
class Orcamento extends Controller {
	function bling(Request $request) {
		// rotina para criar $dados
        $arquivo = fopen("$request->pBling.csv", "w");
        fputcsv($arquivo, $dados[0]);
        foreach ($dados as $linha) {
            if ($linha != $dados[0]) {
                fputcsv($arquivo, $linha);
            }
        }
        fclose($arquivo);
      	if (file_exists("$request->pBling.csv")) {
        	header('Content-Description: File Transfer');
    		header('Content-Type: application/octet-stream');
    		header('Content-Disposition: attachment; filename=' . basename("$request->pBling.csv"));
    		header('Content-Length: ' . filesize("$request->pBling.csv"));
    		readfile("$request->pBling.csv");
          	unlink("$request->pBling.csv");
		}
}

Mas esse código não funciona no Livewire. Depois de pesquisar o Livewire, o Laravel, o Copilot e um monte de tentativa e erro, cheguei nesse código:

arquivo app > Livewire > Lorcamento.php
<?php
namespace App\Livewire;
use App\Models\tbhistped;
use App\Models\tbpedido;
use App\Models\tbpessoa;
use App\Models\tbprod;
use Livewire\Attributes\Layout;
use Livewire\Component;

#[Layout('components.layouts.app',['titulo'=>'Orçamento'])]
class Lorcamento extends Component {

    public $bling,$histped,$mensagem,$modal,$modal2;
    public $pedido,$pessoa,$procPed,$prod,$qt,$vendido,$vr=[];

	// listagem parcial

    function gerarBling() {
        $this->modal = false;
        $this->modal2 = false;
        $pedido = $this->pedido;
        $pBling = $this->bling;
        tbpedido::where('ped',$pedido)->update(['bling'=>$pBling]);
        $contato="Consumidor Final";
        $itens=tbhistped::where('ped',$pedido)->get();
        $previa=tbhistped::where('ped',$pedido)->where('subtotal','<',0)
            ->sum('subtotal');
        $desconto=$previa ? abs($previa) : 0;
        $total=tbpedido::where('ped',$pedido)->value('total');
        $data=date('d/m/Y',strtotime(tbpedido::where('ped',$pedido)->value('dia')));
        $dados = array(
            array("Número pedido","Nome Comprador","Data","CPF/CNPJ Comprador","Endereço Comprador",
                "Bairro Comprador","Número Comprador","Complemento Comprador","CEP Comprador","Cidade Comprador",
                "UF Comprador","Telefone Comprador","Celular Comprador","E-mail Comprador","Produto",
                "SKU","Un","Quantidade","Valor Unitário","Valor Total",
                "Total Pedido","Valor Frete Pedido","Valor Desconto Pedido","Outras despesas","Nome Entrega",
                "Endereço Entrega","Número Entrega","Complemento Entrega","Cidade Entrega","UF Entrega",
                "CEP Entrega","Bairro Entrega","Transportadora","Serviço","Tipo Frete",
                "Observações","Qtd Parcela","Data Prevista","Vendedor","Forma Pagamento",
                "ID Forma Pagamento"));
        foreach($itens as $item) {
            if($item->subtotal>0) {
                $dados[]=array($pBling,$contato,$data,null,null,
                    null,null,null,null,null,
                    null,null,null,null,null,
                    $item->codprod,$item->un,$item->qt,$item->unitario,$item->subtotal,
                    $total,null,$desconto,null,null,
                    null,null,null,null,null,
                    null,null,null,null,null,
                    null,1,$data,null,1,
                    0);
            }
        }
        $path=storage_path();
        $arquivo = fopen($path.$pBling.".csv", "w+");
        fputcsv($arquivo, $dados[0]);
        foreach ($dados as $linha) {
            if ($linha != $dados[0]) {
                fputcsv($arquivo, $linha);
            }
        }
        fclose($arquivo);
        return response()->download($path.$pBling.".csv","$pBling.csv")
            ->deleteFileAfterSend(true);
    }
}

	

Esse código funciona tanto no Windows quanto no Hostinger. Mas dessa vez eu tive a curiosidade de saber onde exatamente o Laravel cria o arquivo csv. Do jeito que eu fiz, o Laravel cria o arquivo no diretório raíz, e eu chamei o arquivo de 1234.csv, já o Laravel muda o nome para storage1234.csv. Na hora de fazer o download, ele desce com o nome 1234.csv.

Eu não sei se posso ou não usar o diretório raiz, mas é assim que estou trabalhando.

Aqui no Windows, eu consegui criar o arquivo na pasta Storage, mas lá na Hostinger eu não tenho a menor ideia de como fazer isso.

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,4k
    • Posts
      652,2k
×
×
  • Criar Novo...