Как добавить файлы JavaScript и CSS в макет в ZF2

Я пытаюсь изучить ZF2, и я просто хочу указать файлы Javascript и CSS, которые будут включены в мой макет. В настоящее время я передаю массив путей относительно моего public каталог, на мой взгляд, а затем перебрать их. Я хотел бы использовать встроенное решение ZF2, используя:

$this->headScript();
$this->headStyle();

Я перепробовал много предложенных методов по схожим вопросам, но я не должен следовать им правильно.

Одно из решений, которое я пробовал, казалось, имело смысл Вот используя любой из них в моем контроллере:

$this->getServiceLocator()->get('Zend\View\HelperPluginManager')->get('headLink')->appendStylesheet('/css/style.css');
$this->getServiceLocator()->get('viewhelpermanager')->get('headLink')->appendStylesheet('/css/style.css');

Я не уверен что viewhelpermanager это похоже на заполнитель, который использовал плакат, но я видел его более чем в одном вопросе. Я пошел вперед и нашел местоположение Zend\View\HelperPluginManager но это тоже не сработало.

Под «не работает» я подразумеваю, что моя страница отображается без CSS, и из них выводится ноль:

$this->headScript();
$this->headStyle();

Это кажется такой простой задачей, и я не знаю, почему у меня такая большая трудность.

РЕДАКТИРОВАНИЕ № 1:

Вот мой контроллер:

<?php
namespace CSAdmin\Controller;

use Zend\View\Model\ViewModel;
use Zend\View\HelperPluginManager;

class LoginController extends AdminController
{
public function __construct() {
parent::__construct();
}

public function indexAction()
{
//Set Action specific Styles and Scripts
$viewHelperManager = $this->getServiceLocator()->get(`ViewHelperManager`);
$headLinkHelper = $viewHelperManager->get('HeadLink');
$headLinkHelper->appendStylesheet('/css/admin/form.css','text/css',array());
$headLinkHelper->appendStylesheet('/css/admin/styles.css','text/css',array());

//Override view to use predefined Admin Views
$view = new ViewModel(array('data'=>$this->data));
$view->setTemplate('CSAdmin/login/login.phtml'); // path to phtml file under view folder

//Set the Admin Layout
$layout = $this->layout();
$layout->setVariable('layout', $this->layoutVars);
$layout->setTemplate('layout/CSAdmin/login.phtml');

//Render Page
return $view;
}

Мой AdminController:

<?php
namespace CSAdmin\Controller;

use Zend\Mvc\Controller\AbstractActionController;
use Zend\View\Model\ViewModel;

class AdminController extends AbstractActionController
{
protected $data = array();
protected $layoutVars = array();
protected $viewHelper;

public function __construct() {
$this->layoutVars['customStyles'] = array();
$this->layoutVars['customScripts'] = array();
$this->layoutVars['miscCode'] = array();
//$this->viewHelper = $viewHelper;
}
}

РЕДАКТИРОВАТЬ № 2:

Сообщение об ошибке @Wilt для вышеперечисленных контроллеров:
Сообщение об ошибке для вышеперечисленных контроллеров

Строка 19

$viewHelperManager = $this->getServiceLocator()->get("ViewHelperManager");

РЕДАКТИРОВАТЬ № 3:

Здесь задействованы два модуля. Admin а также CSAdminконтроллеры от Admin выдвинуть контроллеры из CSAdmin и все контроллеры из CSAdmin расширить базовый контроллер в CSAdmin AdminController, AdminController продолжается AbstractActionController,

Мой контроллер и массивы service_manager для каждого module.config.php для обоих модулей ниже:

Администратор:

'service_manager' => array(
'invokables' => array(
'CSAdmin\Form\LoginForm' => 'CSAdmin\Form\LoginForm'
),
'factories' => array(
)
),
'controllers' => array(
'invokables' => array(
),
'factories' => array(
'Admin\Controller\Login' => 'Admin\Factory\LoginControllerFactory',
)
),
// This lines opens the configuration for the RouteManager
'router' => array(
// Open configuration for all possible routes
'routes' => array(
'admin' => array(
'type' => 'literal',
'options' => array(
'route'    => '/admin',
'defaults' => array(
'controller' => 'Admin\Controller\Login',
'action'     => 'index',
),
),
'may_terminate' => true,
'child_routes'  => array(
'home' => array(
'type' => 'literal',
'options' => array(
'route'    => '/home',
'defaults' => array(
'controller' => 'Admin\Controller\Login',
'action' => 'home'
)
)
),
)
)
)
)

CSAdmin:

'service_manager' => array(
'invokables' => array(
),
'factories' => array(
'CSAdmin\Mapper\LoginMapperInterface'   => 'CSAdmin\Factory\LoginMapperFactory',
'CSAdmin\Service\LoginServiceInterface' => 'CSAdmin\Factory\LoginServiceFactory'
)
),
'controllers' => array(
'invokables' => array(
),
'factories' => array(
'CSAdmin\Controller\Admin' => 'CSAdmin\Factory\AdminControllerFactory',
'CSAdmin\Controller\Login' => 'CSAdmin\Factory\LoginControllerFactory',
)
)

РЕДАКТИРОВАТЬ № 4:

/module/Admin/src/Admin/Factory/LoginControllerFactory.php:

namespace Admin\Factory;

use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
use Admin\Controller\LoginController;
use CSAdmin\Service\LoginServiceInterface;

class LoginControllerFactory implements FactoryInterface
{
/**
* Create service
*
* @param ServiceLocatorInterface $serviceLocator
* @return mixed
*/
public function createService(ServiceLocatorInterface $serviceLocator)
{

$realServiceLocator = $serviceLocator->getServiceLocator();
$loginService        = $realServiceLocator->get('CSAdmin\Service\LoginServiceInterface');
$loginForm     = $realServiceLocator->get('FormElementManager')->get('CSAdmin\Form\LoginForm');

return new LoginController(
$loginService,
$loginForm
);
}
}

/module/CSAdmin/src/CSAdmin/Factory/AdminControllerFactory.php:

namespace CSAdmin\Factory;

use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
use CSAdmin\Controller\AdminController;
use Zend\View\Helper\BasePath;

class AdminControllerFactory implements FactoryInterface
{
/**
* Create service
*
* @param ServiceLocatorInterface $serviceLocator
* @return mixed
*/
public function createService(ServiceLocatorInterface $serviceLocator)
{

$realServiceLocator = $serviceLocator->getServiceLocator();
//$viewHelper        = $realServiceLocator->get('Zend\View\Helper\BasePath');
//return new AdminController($viewHelper);
return new AdminController();
}
}

/module/CSAdmin/src/CSAdmin/Factory/LoginControllerFactory.php:

namespace CSAdmin\Factory;

use Zend\ServiceManager\FactoryInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
use CSAdmin\Controller\LoginController;

class LoginControllerFactory implements FactoryInterface
{
/**
* Create service
*
* @param ServiceLocatorInterface $serviceLocator
* @return mixed
*/
public function createService(ServiceLocatorInterface $serviceLocator)
{

$realServiceLocator = $serviceLocator->getServiceLocator();
$loginService        = $realServiceLocator->get('CSAdmin\Service\LoginServiceInterface');
$loginForm     = $realServiceLocator->get('FormElementManager')->get('CSAdmin\Form\LoginForm');

return new LoginController(
$loginService,
$loginForm
);
}
}

РЕДАКТИРОВАТЬ № 5:

После исправления типа используемых кавычек я все еще не получаю таблицы стилей в своем макете. В качестве теста я меняю ->appendStylesheet() в ->someMethod() и он правильно сообщает, что метод не существует. Так что у него определенно есть экземпляр объекта HeadLink. В качестве следующего шага я решил просто попытаться определить все в файле макета, и он все еще не использует таблицы стилей. Ниже приведен точный код, используемый в <head> тег моего файла макета.

<?php echo $this->doctype(); ?>
<html lang="en">
<head>
<meta charset="utf-8">
<title><?php echo $this->layout['title']; ?></title> //Intend to change eventually.
<?php
$this->headLink()->appendStylesheet('/css/admin/form.css');
$this->headLink()->appendStylesheet('/css/admin/styles.css');
echo $this->headScript();
echo $this->headStyle(); //This outputs nothing when viewing with the chrome debugger.
</head>

РЕДАКТИРОВАТЬ № 6:
Чтобы заставить его работать, вместо использования:

echo $this->headScript();
echo $this->headStyle();

Я просто должен был сделать:

echo $this->headLink();

2

Решение

Вам придется добавить echo в вывести результат

echo $this->headScript();
echo $this->headStyle();
echo $this->headLink();

ОБНОВИТЬ

Чтобы получить Zend\View\HelperPluginManager в вашем контроллере вы можете сделать так:

$viewHelperManager = $this->getServiceLocator()->get('ViewHelperManager');

Тогда вы можете сделать:

$headLinkHelper = $viewHelperManager->get('headLink');

ОБНОВЛЕНИЕ 2

Другое дело, но это немного смешно, неудивительно, что его было трудно найти.
Вы использовали неправильные цитаты:

`ViewHelperManager` //You cannot use these: `

Попробуйте вот так:

'ViewHelperManager'

или вот так:

"ViewHelperManager"
2

Другие решения

вам нужно добавить файл таким образом

$this->headScript()->appendFile(
'/js/prototype.js',
'text/javascript',
array('conditional' => 'lt IE 7')
);

тогда ты пишешь это

        echo $this->headScript();

Примечание: эхоголовый скрипт требуется только один раз. в противном случае вы вставляете JS больше времени

больше информации на

http://framework.zend.com/manual/current/en/modules/zend.view.helpers.head-script.html

2

По вопросам рекламы [email protected]