Problém s třídou FileUpload

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

Zdravím,
nevím si rady s následujícím „problémem“. Nejspíše to bude nějaká pitomost, ale jelikož jsem úplný začátečník, tak si nevím rady.

Mám model:

<?php

namespace App\Model;

use Nette,
    Nette\Database\Context AS NDatabase;

/**
 * Upload File Model
 */
class UploadFileModel extends Nette\Object
{

    private $db;

    public function __construct(NDatabase $db)
    {
        $this->db = $db;
    }

    public function getFilesTypes()
    {
        return $this->db->table('filetype')->fetchPairs('id', 'name');
    }

}

A Presenter:

<?php

namespace App\Presenters;

use Nette,
    Nette\Application\UI\Form,
    Nette\Http\FileUpload,
    App\Model\UploadFileModel;
    //Nette\Utils\ArrayHash,


/**
 * Files presenter.
 */
class FilesPresenter extends BasePresenter
{
    private $uploadFileModel;

    public function __construct(UploadFileModel $uploadFileModel) {
        parent::__construct();
        $this->uploadFileModel = $uploadFileModel;
    }

    protected function createComponentUploadFileForm()
    {
        $form = new Form;
        $form->addText('fileName', 'Název:');
        $form->addSelect('fileType', 'Typ souboru:', $this->uploadFileModel->getFilesTypes())
                ->setPrompt('Vyberte typ souboru')
                ->setRequired();
        $form->addUpload('file', 'Vybrat soubor:')
                ->setRequired();
        $form->addSubmit('send', 'Nahrát');

        $form->onSuccess[] = array($this, 'uploadFileFormSucceeded');
        return $form;
    }

    public function uploadFileFormSucceeded(Form $form, $values)
    {
        /** @var \Nette\Http\FileUpload */
        $values = $form->getValues();

    }
}

Jde mi o to, že nemůžu používat metody z \FileUpload – ->isOK(), ->move() atd.
Ale už si opravdu nevím rady, jak to „připojit“ aby to jsem k nim měl přístup.
Děkuji :o)

Eda
Backer | 220
+
0
-

V metodě uploadFileFormSucceeded dostáváš v argumentu celou instanci tvého formu. Tzn. stačí si sáhnout na požadovaný formulářový prvek.

public function uploadFileFormSucceeded(Form $form, $values)
{
    /** @var \Nette\Http\FileUpload */
    $fileUpload = $form['file'];

		if ($fileUpload->isOk()) {
			...
		}
}
TomasG
Člen | 23
+
0
-

Bohužel, takhle nemám „přístup“ k metodám isOK() atd.

Když použiju tohle, co jsi mi napsal, tak dostanu error:

Call to undefined method Nette\Forms\Controls\UploadControl::isOk().

David Kudera
Člen | 455
+
0
-
$values->file->isOk();

Edit: jen dodám, že přístup přes form vrátí celý prvek formu a ne jeho hodnotu, muselo by se udělat $form['file']->getValue()->isOk().

Editoval David Kudera (17. 5. 2015 11:10)

TomasG
Člen | 23
+
0
-

Díky :o)
Už to funguje, akorát mi IDE nenabízí tyhle metody na výběr… nevím proč no, ale to nevadí.