ZEND2 przycisk submit nie robi nic

0

Proszę o pomoc

Po naciśnięciu przycisku submit kompletnie nic się nie dzieje, żadnego errora tylko chwile przeładuje się strzałka i nic...

Akcja Add z kontrolera :

public function addAction() 
    {
        $form = new ProductForm();
        $form->get('submit')->setValue('Add');
        
        $request = $this->getRequest();
        if($request->isPost()){
            //nowy produkt
            $product = new Product();
            $form->setInputFilter($product->getInputFilter());
            $form->setData($request->getPost());
            
            if($form->isValid())
            {
            $product->exchangeArray($form->getData());
            $this->getProductTable()->saveProduct($product);
            
            return $this->redirect()->toRoute('product'); 
            }
        }
        return array('form'=>$form);
    }
    

Formularz wyglada tak:

<?php

namespace Product\Form;
use Zend\Form\Form;

class ProductForm extends Form { 
    
    
    public function __construct($name = null) 
    {
        parent::__construct('product'); 
    /*$this->setAttributes(array(
            'method'=>'post')); nie potrzebne domyslny post w z2*/
    
                $this->add(array(
           'name'=>'id',
            'type'=>'Hidden',
            ));
            $this->add(array(
               'name'=>'name',
                'type'=>'Text',
                'options'=>array(
                  'label'=>'Nazwa'  
                ),
            ));
            $this->add(array(
               'name'=>'price',
                'type'=>'Text',
                'options'=>array(
                  'label'=>'Cena' 
                ),
            ));
             $this->add(array(
               'name'=>'submit',
                  'type'=>'Submit',
                'attributes'=>array( 
                  'value'=>'Zapisz',
                    'id'=>'submitbutton',
                    'class'=>'btn btn-primary',
                    ),
            ));
    }
}

Sam widok:

<?php

$title = 'Dodaj Produkt';
$this->headTitle($title);

?>

<h1><?php echo $this->escapeHtml($title);?> </h1>

<?php
$form = $this->form;
$form->setAttribute('action',$this->url('product',array('action'=>'add'))); 
$form->prepare();

echo $this->form()->openTag($form); 
echo $this->formHidden($form->get('id')); 
echo $this->formRow($form->get('name'));
echo $this->formRow($form->get('price'));
echo $this->formSubmit($form->get('submit')); 
echo $this->form()->closeTag($form); 
?>

myślałem że to może wina bazy danych ale fetchAll działa więc czemu insert miałby nie...
firebug wyrzuca cos takiego

<form id="product" action="/Autostop/public/product/add" name="product" method="POST">
<input type="hidden" value="" name="id">
<label>
<span>Nazwa</span>
<input type="text" value="er" name="name">
</label>
<label>
<span>Cena</span>
<input type="text" value="33" name="price">
</label>
<input id="submitbutton" class="btn btn-primary" type="submit" value="Add" name="submit">
</form>
0

WRONG.

Nie nadawaj name=submit żadnemu elementowi. Żadnemu. Nigdy. Nie.

Na 99% to jest przyczyna, po samym tytule od razu pomyślałem "nazwał przycisk submit" i się nie pomyliłem, więc to musi być to ;)

0
dzek69 napisał(a):

WRONG.

Nie nadawaj name=submit żadnemu elementowi. Żadnemu. Nigdy. Nie.

Na 99% to jest przyczyna, po samym tytule od razu pomyślałem "nazwał przycisk submit" i się nie pomyliłem, więc to musi być to ;)

Nie mogę zmienić nazwy na inną bo Zend wyrzuca błąd

No element by the name of [submit] found in form
0

Nic nie wyrzuca
W formie dajesz:

 $this->add(array(
               'name'=>'zapisz',
                  'type'=>'Submit',
                'attributes'=>array( 
                  'value'=>'Zapisz',
                    'id'=>'submitbutton',
                    'class'=>'btn btn-primary',
                    ),
            ));

W widoku natomiast robisz tak:

echo $this->formSubmit($form->get('zapisz')); 

i wszystko będzie chodziło.

0

Zmieniłem i dalej

An error occurred

An error occurred during execution; please try again later.


Additional information:

Zend\Form\Exception\InvalidElementException
File:D:\xampp\htdocs\autostop\vendor\zendframework\zend-form\src\Fieldset.php:218
Message:No element by the name of [submit] found in form
Stack trace:#0 D:\xampp\htdocs\autostop\module\Product\src\Product\Controller\ProductController.php(37): Zend\Form\Fieldset->get('submit')
#1 D:\xampp\htdocs\autostop\vendor\zendframework\zend-mvc\src\Controller\AbstractActionController.php(82): Product\Controller\ProductController->addAction()
#2 [internal function]: Zend\Mvc\Controller\AbstractActionController->onDispatch(Object(Zend\Mvc\MvcEvent))
#3 D:\xampp\htdocs\autostop\vendor\zendframework\zend-eventmanager\src\EventManager.php(444): call_user_func(Array, Object(Zend\Mvc\MvcEvent))
#4 D:\xampp\htdocs\autostop\vendor\zendframework\zend-eventmanager\src\EventManager.php(205): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
#5 D:\xampp\htdocs\autostop\vendor\zendframework\zend-mvc\src\Controller\AbstractController.php(118): Zend\EventManager\EventManager->trigger('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
#6 D:\xampp\htdocs\autostop\vendor\zendframework\zend-mvc\src\DispatchListener.php(93): Zend\Mvc\Controller\AbstractController->dispatch(Object(Zend\Http\PhpEnvironment\Request), Object(Zend\Http\PhpEnvironment\Response))
#7 [internal function]: Zend\Mvc\DispatchListener->onDispatch(Object(Zend\Mvc\MvcEvent))
#8 D:\xampp\htdocs\autostop\vendor\zendframework\zend-eventmanager\src\EventManager.php(444): call_user_func(Array, Object(Zend\Mvc\MvcEvent))
#9 D:\xampp\htdocs\autostop\vendor\zendframework\zend-eventmanager\src\EventManager.php(205): Zend\EventManager\EventManager->triggerListeners('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
#10 D:\xampp\htdocs\autostop\vendor\zendframework\zend-mvc\src\Application.php(314): Zend\EventManager\EventManager->trigger('dispatch', Object(Zend\Mvc\MvcEvent), Object(Closure))
#11 D:\xampp\htdocs\autostop\public\index.php(21): Zend\Mvc\Application->run()
#12 {main}
0
public function addAction() 
    {
        $form = new ProductForm();
        $form->get('zapsiz')->setValue('Add');//tutaj zmienione
 
        $request = $this->getRequest();
        if($request->isPost()){
            //nowy produkt
            $product = new Product();
            $form->setInputFilter($product->getInputFilter());
            $form->setData($request->getPost());
 
            if($form->isValid())
            {
            $product->exchangeArray($form->getData());
            $this->getProductTable()->saveProduct($product);
 
            return $this->redirect()->toRoute('product'); 
            }
        }
        return array('form'=>$form);
    }

Przerób najpierw może tutorial z zenda 2.

0
kalar napisał(a):

Przerób najpierw może tutorial z zenda 2.

Robiłem z płyty strefa kursów, no ale cóż może zacznę jeszcze raz, i nie na localhost tylko normalnie na hostingu, nie wiem już sam co nie gra , może lokalnie coś nie tak...trudno
ps. podłączyłem edit i pobiera id z formularza edycji ale po kliknięciu submit zamiast redirect do modułu to przenosi do add....

0

W jaki sposób podłączyłeś ten edit? Formularze w ZF2 działają w ten sposób, że po kliknięciu submit wykonywana jest akcja z danego modułu.
Taki kod ustawia Ci tą akcję na add w module product.

$form->setAttribute('action',$this->url('product',array('action'=>'add'))); 
0

Moja akcja edit:

<?php

$title = 'Dodaj Produkt';
$this->headTitle($title);

?>

<h1><?php echo $this->escapeHtml($title);?> </h1>

<?php
$form = $this->form;
$form->setAttribute('action',$this->url('product',array('action'=>'edit','id'=>$this->$id))); 
$form->prepare();

echo $this->form()->openTag($form); 
echo $this->formHidden($form->get('id')); 
echo $this->formRow($form->get('name'));
echo $this->formRow($form->get('price'));
echo $this->formSubmit($form->get('submit')); 
echo $this->form()->closeTag($form); 
?>

Kod z add:

<?php

$title = 'Dodaj Produkt';
$this->headTitle($title);

?>

<h1><?php echo $this->escapeHtml($title);?> </h1>

<?php
$form = $this->form;
$form->setAttribute('action',$this->url('product',array('action'=>'add'))); 
$form->prepare();

echo $this->form()->openTag($form); 
echo $this->formHidden($form->get('id')); 
echo $this->formRow($form->get('name'));
echo $this->formRow($form->get('price'));
echo $this->formSubmit($form->get('submit')); 
echo $this->form()->closeTag($form); 

1 użytkowników online, w tym zalogowanych: 0, gości: 1