Один из вариантов будет через помощник вида, хотя есть и другие способы.
Создайте интерфейс для любого объекта, который «осведомлен» о системе, скажем SystemAwareInterface
. Убедитесь, что ваш пользовательский класс (или любой другой класс) реализует этот интерфейс и возвращает идентификатор системы.
interface SystemAwareInterface {
public function getSystemId();
}
Создать помощник вида, я предполагаю, в пространство имен верхнего уровня System
и что у вас есть какие-то услуги, которые можно загрузить запись из базы данных это тождество (позволяет называть его SystemService
с методом loadById()
).
namespace System\View\Helper;
use System\Entity\SystemAwareInterface;
use System\Service\SystemService;
use Zend\View\Helper\AbstractHelper;
class System extends AbstractHelper
{
// Service used to 'load' a system
protected $systemService;
public function __construct(SystemService $systemService)
{
$this->systemService = $systemService;
}
public function __invoke(SystemAwareInterface $entity = null)
{
if (0 === func_num_args()) {
return $this;
}
return $this->render($entity);
}
public function render(SystemAwareInterface $entity)
{
return $this->systemService->loadById($entity->getSystemId());
}
public function getName(SystemAwareInterface $entity)
{
$system = $this->render($entity);
return $system->getName();
}
}
Затем зарегистрировать услугу с ViewHelperPluginManager
, добавив фабрику getViewHelperConfig
.
public function getViewHelperConfig()
{
return array(
'factories' => array(
'System' => function($vpm) {
$sm = $vpm->getServiceLocator();
$service = $sm->get('System\Service\SystemService');
return new View\Helper\Sysytem($service);
}
),
);
}
Теперь в скрипте просмотра вы можете эхом отослать имя системы с помощью помощника.
// echo out the name of the system
echo $this->system()->getName($user);
Вы также можете использовать другие помощники вида в вашем новом помощнике; поэтому вы можете получить помощника escapeHtml
и избежать содержимого HTML в методе getName()
(я оставлю это вам).
Я предполагаю, что вы не используете ORM ('$ user-> system' - это целочисленный/внешний ключ, а не объект' System')? – AlexP
Нет, я не использую ORM, насколько мне известно. – anewvision