Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework][ZendFramework2] Zapis do bazy danych. Błąd podczas odwołania getMock
Forum PHP.pl > Forum > PHP > Frameworki
kilaz91


Witam, mam pytanie dotyczące błędu.

gdy chcę dodać do bazy danych wpis poprzez funkcję:

Kod
public function saveNewReferer($refererData)
    {
        $referer = new Referer();
        $referer->exchangeArray($refererData);
    
        $mockTableGateway = $this->getMock('Zend\Db\TableGateway\TableGateway', array('insert'), array(), '', false);
        $mockTableGateway->expects($this->once())->method('insert')->with($refererData);
    
        $refererTable = new RefererTable($mockTableGateway);
        $refererTable->saveReferer($referer);
    }


przez
Kod
$this->saveNewReferer(array('name'=>'name','phone'=>'1234','adres'=>'asdssss'));

(przyjmuje tablice)
aplikacja pada z komunikatem:
Cytat
Zend\Mvc\Controller\PluginManager::get was unable to fetch or create an instance for getMock
w pliku
Cytat
/var/www/capselZend/vendor/zendframework/zendframework/library/Zend/ServiceManager/ServiceManager.php:518

komentując linijkami, pada na
Kod
$mockTableGateway = $this->getMock('Zend\Db\TableGateway\TableGateway', array('insert'), array(), '', false);


w klasie referer używam:
Kod
namespace Referer\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;
use Zend\Http\Header\SetCookie;
use Referer\Form\RefererForm;
use Zend\Db\TableGateway\TableGateway;
use Referer\Model\Referer;
use Referer\Model\RefererTable;

początek funkcji zapisującej wygląda tak:
public function saveReferer(Referer $referer)
    {
        $data = array(
            'name' => $referer->name,
            'phone'  => $referer->phone,
            'adres'  => $referer->adres,
        );
...
$this->tableGateway->insert($referer);


ale gdy wprowadzam w identycznej postaci dane czyli tablica:

w sposób
Kod
$ref=$this->getRefererTable()->saveReferer(array('name'=>'name','phone'=>'1234','adres'=>'asdssss'));

do funkcji
Kod
public function getRefererTable()
    {
        if (!$this->refererTable) {
            $sm = $this->getServiceLocator();
            $this->refererTable = $sm->get('Referer\Model\RefererTable');
        }
        return $this->refererTable;
    }


zmieniając funkcję zapisującą na:

Kod
public function saveReferer($referer)
    {
...
$this->tableGateway->insert($referer);


to wtedy ładnie zapisuje do bazy danych..

czy ktoś wie może jak to rozwiązać ?
I jaką będę miał różnicę jak zastosuje nieszablonowy sposób zapisu danych czyli drugi przykład?

Zrobię duży błąd ?
RiE
Nie pokazałeś najważniejszego. Jak wygląda metoda getMock()?
Bo nie jest to standardowa metoda w Zend 2, a te dwie linijki
  1. $mockTableGateway = $this->getMock('Zend\Db\TableGateway\TableGateway', array('insert'), array(), '', false);
  2. $mockTableGateway->expects($this->once())->method('insert')->with($refererData);


Łudząco przypominają metody z testów jednostkowych PHPUnit.

em1X
Kod skopiowany z testów jednostkowych i wklejony wprost do kontrolera. Mistrzostwo PHP biggrin.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.