Vygenerování a uložení txt souboru

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
Carson
Člen | 35
+
0
-

Ahoj,

řeším si generování konfiguračního souboru, který si následně potřebuji uložit a udělat redirect na daném formuláři, ze kterého čerpám data pro generování. Podařilo se mi soubor vygenerovat a uložit, ale nejsem schopen udělat redirect.

Níže je kód

Formulář

public function createComponentGenerateConfigurationManualy()
    {
        $form = new Form;
        $form->addText('device_name','')
            ->setRequired();
        $form->addSelect('device_vendor', '', array(
                'vendor' => 'vendor',
                'vendor' => 'vendor',
                'vendor' => 'vendor'
            )
        );
        $form->addText('device_ip','')
            ->setRequired();
        $form->addText('mgmt_vlan','')
            ->setRequired()
            ->setAttribute('type' ,'number');
        $form->addText('data_vlan','')
            ->setRequired()
            ->setAttribute('type' ,'number');
        $form->addText('device_stp_region', '')
            ->setRequired();
        $form->addSubmit('submit');
        $form->onSuccess[] = array($this, 'GenerateConfigManualy');

        return $form;
    }

Generování

 public function GenerateConfigManualy($Values){

        $Values = $Values->getValues(TRUE);
        $subnet = $this->ExplodeSubnet($Values['device_ip']);

        $this->replace_array['%sysname%'] = $Values['device_name'];
        $this->replace_array['%stp%'] = $Values['device_stp_region'];
        $this->replace_array['%mgmtVlan%'] = $Values['mgmt_vlan'];
        $this->replace_array['%dataVlan%'] = $Values['data_vlan'];
        $this->replace_array['%ip%'] = $subnet['ip'];
        $this->replace_array['%mask%'] = $this->createNetmaskAddr($subnet['mask']);
        $this->replace_array['%gateway%'] = $this->GetSubnetGateway($subnet['ip'], $this->createNetmaskAddr($subnet['mask']));
        $this->vendor = $Values['device_vendor'];

        $this->flashMessage('Vygenerováno za ' . substr(microtime(), 0, 5) . ' ms', 'alert alert-success');
        $this->print_config();
        $this->redirect('this');

    }

Uložení do PC přes httpresponse


 public function print_config()
    {

        $content = '';

        foreach ($this->GenerateConfig() as $item) {

            $content .= $item. "\n";
        }

        $httpResponse = $this->presenter->getHttpResponse();
        $httpResponse->setContentType('text/plain');
        $httpResponse->setHeader('Content-Disposition', 'attachment; filename="' . $this->replace_array['%sysname%'] .'.txt"');
        $httpResponse->setHeader('Content-Length', strlen($content));

        $this->presenter->sendResponse(new TextResponse($content));

    }

Editoval Carson (27. 6. 2016 12:06)

Felix
Nette Core | 1270
+
0
-

Udelat redirect v tomto pripade nejde. Ty totiz rikas prohlizeci, tohle je request na soubor a tedka hod stahni, pripadne zobraz. Bohuzel tam nejde pridal dalsi funkcnost.

Melo by to jit vyresit pres AJAX.

Carson
Člen | 35
+
0
-

Tuhle odpověď jsem tušil. Nenapadá mně bohužel to, jak to řešit přes AJAX. Můžeš mi prosím nadhodit řešení?

Milo
Nette Core | 1283
+
0
-

Udělej nejprve redirect na tu cílovou HTML stránku a až z ní redirect na vygenerovaný TXT. Prohlížeč nabídne TXT ke stažení a pak zůstane na té HTML.

Pavel Kravčík
Člen | 1206
+
0
-

Občas to děláme hloupěji: Redirect na stránku a té stránce je tlačítko „stáhněte si txt soubor“.

Carson
Člen | 35
+
0
-

Pavel Kravčík napsal(a):

Občas to děláme hloupěji: Redirect na stránku a té stránce je tlačítko „stáhněte si txt soubor“.

Jo, tohle bude asi nejlepší a nejednodušší řešení. Díky!