Ukladani csv souboru na disk
- parti
- Člen | 117
Ahoj prosim neporadili by jste mi jak ulozit CSV soubor na disk. Mam zatim tohle ale nefunguje mi posledni radek $values->save($folder.‚/‘. $csv);.
$this->addUpload('csv');
$this->addHidden('id');
$this->addSubmit('save','Upload')
->setAttribute('class','btn btn-info');
public function submitted ($csv, $delimeter = ',')
{
$values = $this->values;
//creat new folder
$now = new \Nette\Utils\DateTime;
$year = $now->format('Y');
$month = $now->format('m');
$date = $now->format('d');
$folder = 'CSV/'. $year . '/' .$month. '/'.$date;
FileSystem::createDir($folder);
//\Tracy\Dumper::dump($values);die();
$values->save($folder.'/'. $csv);
a u toho posledniho radku mi to pise
Fatal Error
Call to undefined method Nette\Utils\ArrayHash::save()
Dekuji moc za radu.
- David Matějka
- Moderator | 6445
ve $values
mas objekt se vsemi odeslanymi hodnotami. takze
samotny nahrany soubor je v $values->csv
. A to csv je pak
objekt typu FileUpload
s metodou move
- h4kuna
- Backer | 740
David psal metada move nikoliv save. A udělej dump $values aby jsi viděl co je objekt FileUpload. A ten FileSystem::createDir volat nemusíš move metoda to dělá taky.
$values je objekt nebo by měl být ArrayHash nebo pole? Ten nemá na sobě metodu save.
Editoval h4kuna (11. 1. 2017 9:34)
- h4kuna
- Backer | 740
Soubory vždy ukládej absolutně, relativní cesty v tomto případě dělají bordel. V proměnné $csv podle výstupu je objekt Form, což asi úplně nechceš.
$values->csv->move($absoludePath . DIRECTORY_SEPARATOR . $values->csv->getSanitizedName());
Absolutní cestu si vyrob, tak že si do této ukládací třídy pošleš část cesty (wwwDir, appDir nevím jestli je chceš mít v privátní nebo veřejné části webu) a z ní budeš vycházet. Víš jak na to? Zkusíš to?
Ještě by bylo dobré ověřit jestli v cílovém adresáři není stejně pojmenovaný soubor.
Editoval h4kuna (11. 1. 2017 10:00)
- h4kuna
- Backer | 740
Tak evidentně to není presenter.
Pokud máš App\Forms\CsvForm v config.neon jako službu?
Tak si config.neon do služby App\Forms\CsvForm přidej parametr %wwwDir% a uprav si třídu tak že si ten parametr uložíš do vlastnosti třídy.
Ten $this->context->parametes[‚wwwDir‘] nahraď novou vlastností co si založíš.
Pokud ne, tak jak ho instancuješ?
- h4kuna
- Backer | 740
Já ti to programovat nebudu. Stále jsi mi neodpověděl na otázku, kde a jak vytváříš instanci App\Forms\CsvForm. Do této třídy App\Forms\CsvForm je potřeba dostat nastavení z config.neon, aby jsi mohl vytvořit absolutní cestu. Ta proměnná v configu se jmenuje %wwwDir%. Pročti ten materiál co jsem poslal výše.
- parti
- Člen | 117
Ahoj tak ukladani jsem vyresil jednoduse takto
$file = $values['csv'];
$file->move($folder.'blablabla');
Samozrejme jeste je tam vytvoreni souboru pred tim.
Dik za materialy ty jsem si prostudoval ale to stou absolutni cestou a nastaveni
v configu my prislo zbytecne komplikovane, ale jsem jenom zacatecnik takze
pokud se mylim rad se neco priucim.