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 | 1247
+
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 | 1196
+
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!