Я делаю какой-то сайт на рынке с Zend Framework 2. У дома появился слайдер, показывающий все продукты (реализованные с ключевыми кадрами CSS3) и некоторый текст. Оба скользящих изображения и текст считываются из базы данных MySQL. Но в результате я не получаю никаких выходных данных, но также и ошибок. Ползунок получает столько изображений, сколько строк базы данных, но до сих пор не повторяется контент; плюс, если я пытаюсь изменить вещи (например, учетные данные db или функции getter в модели), он выдает ошибки, как ожидалось, поэтому он четко читает db, и проблема в другом месте.Zend Framework 2 - Отображение содержимого базы данных
Db для текста имеет 3 поля: идентификаторов имени текста
Модели для текста (home.php, есть более HomeInterface.php определить все функции)
<?php
namespace Site\Model;
class Home implements HomeInterface {
protected $id;
protected $name;
protected $text;
public function getId() {
return $this->id;
}
public function getName() {
return $this->name;
}
public function getText() {
return $this->text;
}
}
?>
Mapper для текста
<?php
namespace Site\Mapper;
use Site\Model\HomeInterface;
use Zend\Db\Adapter\AdapterInterface;
use Zend\Db\Adapter\Driver\ResultInterface;
use Zend\Stdlib\Hydrator\HydratorInterface;
use Zend\Db\ResultSet\HydratingResultSet;
use Zend\Db\Sql\Sql;
use Zend\Stdlib\Hydrator\ClassMethods;
class TextMapper implements TextMapperInterface {
protected $homePrototype;
protected $adapter;
protected $hydrator;
public function __construct(AdapterInterface $adapter, HomeInterface $homePrototype, HydratorInterface $hydrator) {
$this->adapter = $adapter;
$this->homePrototype = $homePrototype;
$this->hydrator = $hydrator;
}
public function find($name) {
$sql = new Sql($this->adapter);
$select = $sql->select();
$select->from("mono");
$select->where(array("name = ?" => $name));
$stmt = $sql->prepareStatementForSqlObject($select);
$result = $stmt->execute();
if ($result instanceof ResultInterface && $result->isQueryResult() && $result->getAffectedRows()) {
return $this->hydrator->hydrate($result->current(), $this->homePrototype);
}
throw new \InvalidArgumentException("{$name} non esiste.");
}
}
?>
Mapper для текста имеет завод, так как он имеет зависимости:
<?php
namespace Site\Factory;
use Site\Mapper\TextMapper;
use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
use Site\Model\Home;
use Zend\Stdlib\Hydrator\ClassMethods;
class TextMapperFactory implements FactoryInterface {
public function createService(ServiceLocatorInterface $serviceLocator) {
return new TextMapper($serviceLocator->get("Zend\Db\Adapter\Adapter"), new Home(), new ClassMethods(false));
}
}
?>
Сервис для текста:
<?php
namespace Site\Service;
use Site\Model\Home;
use Site\Model\HomeInterface;
use Site\Mapper\TextMapperInterface;
class HomeService implements HomeServiceInterface {
protected $textMapper;
public function __construct (TextMapperInterface $textMapper) {
$this->textMapper = $textMapper;
}
public function findText($name) {
return $this->textMapper->find($name);
}
}
?>
Фабрика службы:
<?php
namespace Site\Factory;
use Site\Service\HomeService;
use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
class HomeServiceFactory implements FactoryInterface {
public function createService(ServiceLocatorInterface $serviceLocator) {
$textMapper = $serviceLocator->get("Site\Mapper\TextMapperInterface");
return new HomeService($textMapper);
}
}
?>
Контроллер
<?php
namespace Site\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Site\Service\HomeServiceInterface;
use Zend\View\Model\ViewModel;
class SkeletonController extends AbstractActionController {
protected $homeService;
public function __construct(HomeServiceInterface $homeService) {
$this->homeService = $homeService;
}
public function indexAction() {
return new ViewModel(array (
"home" => $this->homeService->findText("home")
));
}
}
?>
Наконец, вид:
<?php echo $this->home->getText(); ?>
Код для слайдера аналогичен, и обе части этой страницы, вероятно, имеют одинаковую проблему. Как я уже сказал, db обнаружен, таблицы и столбцы тоже, они не пусты, но ничего не отражается. Интерфейсы правильно написаны, определяя все функции. Все представления находятся в папке Site \ view \ Site \ Skeleton. Какие-нибудь подсказки о том, где проблема? Спасибо.
Так вы говорите о (методах класса) заставляет меня добавить методы установщиков? Могу ли я оставить их пустыми какое-то время, пока я не смогу создать всю часть пользователя? Я также попытаюсь сделать это с помощью Reflection, хотя для этого проекта понадобится администратор sidelater – ImLearningZF2
Вам нужно будет добавить их для его работы для гидратора 'ClassMethods'. – AlexP
Он выглядит незначительным, но он работает хорошо. спасибо за помощь – ImLearningZF2