2014-02-27 6 views
4

Я хотел бы получить Базовый URL-адрес в контроллере Zend Framework 2 для передачи в качестве атрибутов src img-тега. Я помещаю свое изображение в общую папку.Базовый URL-адрес Zend Framework 2

Как я могу получить Базовый URL в контроллере Zend Framework 2 ??

+1

Почему бы просто не использовать абсолютный путь? ''? –

+0

@TimFountain с использованием полного URL-адреса может быть удобен, например, вы отправляете html-письмо с логотипом вашей компании без отправки изображения. – SmasherHell

ответ

10

Вы можете использовать ServerUrl вид помощника для абсолютного URL, и BasePath для относительных из них в любом виде.

$this->serverUrl();    // output: http://your.domain.com 
$this->serverUrl('/foo');  // output: http://your.domain.com/foo 
$this->basePath();    // output:/
$this->basePath('img/bar.png'); // output: /img/bar.png 

Edit: Ой извините, вопрос о том, что значение уровня контроллера, а не смотреть. В любом контроллере вы можете сделать это:

$helper = $this->getServiceLocator()->get('ViewHelperManager')->get('ServerUrl'); 
$url = $helper->__invoke('/foo'); 
// or 
$url = $helper('/foo'); 

Обновление для Zend Framework 3

Поскольку контроллеры не ServiceLocatorAware по умолчанию в ZF3, вам нужно впрыснуть экземпляр помощника к контроллеру, предпочтительно с использованием завод.

Для новичков, пример фабрика может выглядеть следующим образом:

<?php 
namespace Application\Controller\Factory; 

use Interop\Container\ContainerInterface; 
use Zend\ServiceManager\Factory\FactoryInterface; 

class ExampleActionFactory implements FactoryInterface 
{ 
    /** 
    * Factories are invokable 
    * 
    * @param ContainerInterface $dic 
    * @param string    $requestedName 
    * @param array|null   $options 
    * 
    * @throws \Psr\Container\ContainerExceptionInterface 
    * 
    * @return ExampleAction 
    */ 
    public function __invoke(ContainerInterface $dic, $requestedName, array $options = null) 
    { 
     $helper = $dic->get('ViewHelperManager')->get('ServerUrl'); 

     return new ExampleAction($helper); 
    } 
} 

и конструктор подпись на контроллере что-то вроде:

/** 
* @var ServerUrl 
*/ 
private $urlHelper; 

public function __construct(ServerUrl $helper) 
{ 
    $this->urlHelper = $helper; 
} 
+1

Вопрос состоял в том, чтобы получить baseUrl в контроллере, но лучше использовать его в представлении. – jmleroux

+0

Ницца. Я использовал ZF2 с бета-версии и даже не знал об этом помощнике. Всегда конкатенация протоколов и имен хостов. – Andris

+1

Спасибо за обновление вашего вопроса о ZF3 – evilReiko

6

Вы также можете использовать BasePath Helper с вашей точкой зрения.

И если он предназначен для установки атрибута изображения src, не нужно устанавливать его на уровне контроллера.