Illegal string offset ‚operation‘ při práci s formůlářem

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
mordare
Začátečník | 117
+
0
-

Zdravím lidi. měl bych dotaz. Dělám fotogalerii, ale při zpracovávání formuláře obrázků dostávám laděnku se zprávou `Illegal string offset ‚operation‘ ` zde dávám uvedený formulář který mi to provádí. Ještě upzorním že se jedná o verzi pro PHP 5.2

public function createComponentImageEditForm()
    {
        $form = new NAppForm;
        for ($i = 0; $i < $this->imageCount; $i++)
        {
            $form->addGroup('Editace Obrázku');
            $c = $form->addContainer('c_image' . $i);
            $c->addImage('image', 'http://muj_web.cz/fotogalerie/'. $this->imagesEdit[$i]->file_name . '_small.jpeg');

            $c->addText('rank', 'Pořadí v galerii:')
                    ->setValue($this->imagesEdit[$i]->rank);
            $c->addTextArea('comment', 'Popis obrázku:')
                    ->setValue($this->imagesEdit[$i]->comment);
            $c->addHidden('imgId')
                    ->setValue($this->imagesEdit[$i]->id);
            $radio = $c->addRadioList('operation', 'Akce:', array(
                        'noop' => 'Nedělat nic',
                        'copy' => 'Kopírovat do',
                        'move' => 'Přesunout do',
                        'delete' => 'Smazat z galerie',
                        'unlink' => 'Smazat ze serveru'
            ));


            $radio->setDefaultValue('noop');
        }
        $galArr = DatabaseManager::getAllgalleriesTitle();
        $form->addGroup('Kopírovat/přesunout');
        $form->addSelect('copy', 'Kopírovat do:', $galArr);
        $form->addSelect('move', 'Přesunout do:', $galArr);

        $form->setCurrentGroup();
        $form->addSubmit('send', 'Editovat');
        $form->onSuccess[] = callback($this, 'editImageFormSubmitted');

        return $form;
    }

    public function editImageFormSubmitted($form)
    {
        $values = $form->getValues();
        foreach($values as $key => $imagedata)
        {
            if ($imagedata['operation'] !== 'unlink') {
                $img = DatabaseManager::getImage($imagedata['imgId']);
                $image = new ImageModel($img);
                $image->editImage($imagedata, $this->id);
            }
            elseif ($imagedata['operation'] == 'move' && $imagedata['move'] != -2) {
                $img = DatabaseManager::getImage($imagedata['imgId']);
                $test = dibi::select('*')->from('images')->where('file_name=%s', $img->filename)->where('gallery_id=%i', $imagedata['move'])->fetch();
                if (count($test) > 0) {
                    throw new Exception('Zadaná galeriie obrázek již obsahuje');
                }
                else
                {
                    $image = new ImageModel($img);
                    $image->editImage($imagedata, $imagedata['move']);
                }
        }

Editoval mordare (20. 1. 2013 16:44)

Majkl578
Moderator | 1364
+
0
-

Dumpni si $imagedata v tom foreachi v callbacku.

mordare
Začátečník | 117
+
0
-

mno tak sem si to dumpnul a velezlo z toho tohle.
object(NArrayHash)#152 (4) { ["rank"]=> string(1) "0" ["comment"]=> string(12) "asasdqasdatr" ["imgId"]=> string(1) "3" ["operation"]=> string(4) "noop" }

Tím pádem to tam je. takže co s tím.

Majkl578
Moderator | 1364
+
0
-

Na jakém řádku to hází zmíněnou chybu? Nic divného tu nevidím, nemůže být problém v té metodě editImage?

mordare
Začátečník | 117
+
0
-

no hází to u první if podmínky v tom cyklu. tedy zde

if ($imagedata['operation'] !== 'unlink') {
     $img = DatabaseManager::getImage($imagedata['imgId']);
     $image = new ImageModel($img);

no a přesněji hází laděnka Warning. Je zajímavé, ale to že to co je v té podmínce tak se většinou provede.

mordare
Začátečník | 117
+
0
-

zkusil sem vypnou hlášky typu NOTICE, ale díky tomu sem jen zjistil, že se mi provádí všechny IF podmínky bez rozdílu co je obsaženo v $imagedata['operation']

nevíte tedy někdo co s tím?

Editoval mordare (23. 1. 2013 18:30)