Zend framework 在Zend框架模块中可以有图像、CSS和脚本吗?
在我的Zend框架模块中,我有需要特定javascript、CSS和图像的视图 是否可以将它们包含在模块中,而不必在使用模块的每个项目中复制它们?(因为“public/”文件夹不是模块的一部分,而是特定于每个应用程序) 如果没有,我该怎么办 谢谢 包含将“public\u html/mymodule/”链接到模块文件夹中的子目录的“安装说明”是最简单的 我以前写过一个控制器/动作/路线,提供脚本/css/图像。这并不十分复杂,但正确处理缓存是一种痛苦。我并不是说这是一个很好的方法,我的意思是,你真的不应该花费所有的时间来设置zend框架并发送一个动作来给某人一个静态javascript文件。。。但是,您可以这样做,并告诉他们也链接目录 如果你决定使用它,我写的摘要可以提供一些静态内容:Zend framework 在Zend框架模块中可以有图像、CSS和脚本吗?,zend-framework,Zend Framework,在我的Zend框架模块中,我有需要特定javascript、CSS和图像的视图 是否可以将它们包含在模块中,而不必在使用模块的每个项目中复制它们?(因为“public/”文件夹不是模块的一部分,而是特定于每个应用程序) 如果没有,我该怎么办 谢谢 包含将“public\u html/mymodule/”链接到模块文件夹中的子目录的“安装说明”是最简单的 我以前写过一个控制器/动作/路线,提供脚本/css/图像。这并不十分复杂,但正确处理缓存是一种痛苦。我并不是说这是一个很好的方法,我的意思是,你
<?php
class MW_Script_Controller_Abstract extends Zend_Controller_Action
{
protected $_basepath;
public function publicAction()
{
// not initialized
if (!$this->_basepath) throw new Exception("base path not set");
if (!($filename = $this->_request->getParam("filename")))
$filename = $this->_request->getParam(1);
if (!$filename) throw new Exception("Unknown Filename");
$fn = realpath($this->_basepath."/".$filename);
if (!$fn || !is_file($fn)) throw new MW_Controller_404Exception("File not found");
// determine extension to determine mime-type
preg_match("#\.([^.]+)$#", $filename, $matches);
if (!empty($matches[1]) switch (strtolower($matches[1]))
{
case "js":
$this->getResponse()->setHeader('Content-Type', 'text/javascript');
ini_set('html_errors', 0);
break;
case "css":
$this->getResponse()->setHeader('Content-Type', 'text/css');
ini_set('html_errors', 0);
break;
case "html":
$this->getResponse()->setHeader('Content-Type', 'text/html');
break;
default:
$this->getResponse()->setHeader('Content-Type', 'text/plain');
ini_set('html_errors', 0);
break;
}
// Disable Layout
$this->_helper->viewRenderer->setNoRender(true);
$this->_helper->layout->disableLayout();
$mtime = filemtime($fn);
if ($modsince = $this->getRequest()->getServer('HTTP_IF_MODIFIED_SINCE'))
{
$modsince = new Zend_Date($modsince);
$modsince = $modsince->getTimestamp();
if ($mtime <= $modsince) {
$this->getResponse()->setHttpResponseCode(304);
return;
}
}
$this->getResponse()->setHeader('Last-Modified', gmdate("D, d M Y H:i:s",$mtime). " GMT");
readfile($fn);
// All Done
}
}
最简单的方法是将资产放在public
目录中,并使用baseUrl()
helper
但是,最好的方法是将所有脚本移动到/public
目录。然后,您将可交换“皮肤”。
当然,您必须向.htaccess
添加额外的规则来保护.phtml
为此,您必须自定义标准应用程序结构以满足您的需要。
有关进一步的解释,请参阅。我不确定我是否在跟踪您:我的模块X使用了图像X1.jpg(此图像仅由X使用)。如果在另一个应用程序中,我使用X模块,我不想复制图像(我希望模块X的图像在模块内)。我不明白你的回答能帮我什么忙。嗯,我有一个疑问:当我谈论脚本时,我指的是Javascript。你说的“.phtml”,意思是视图。链接/别名:我们(一个团队)在Mac、Linux和Windows上工作,并通过SVN进行同步。我认为这将是一个真正的混乱(在windows上链接是不可能的)。作为为图像服务的控制器,这个理论很有趣,但我不想仅仅为静态图像在内存中构建一个完整的Zend应用程序。
<?php
class MW_Script_Route extends Zend_Controller_Router_Route_Abstract
{
/**
* The Root Path for this "MW_Script_Controller" area
*
* @var string a root "path" for this route
**/
protected $_rootpath;
/**
* Holds user submitted default values for route's variables. Name and value pairs.
* @var array
*/
protected $_defaults = array();
/**
* Instantiates route based on passed Zend_Config structure
*
* @param Zend_Config $config Configuration object
*/
public static function getInstance(Zend_Config $config)
{
$defs = ($config->defaults instanceof Zend_Config) ? $config->defaults->toArray() : array();
return new self($config->route, $defs);
}
/**
* Stores the basepath for later matching, also stores defaults. If no "module" is passed in to
* the $defaults array, the "basepath" will be used as a module name, "index" will be used as a
* controller, and "public" will be used as a action.
*
* @param string $route Map used to match with later submitted URL path
* @param array $defaults Defaults for map variables with keys as variable names
* @param array $reqs Regular expression requirements for variables (keys as variable names)
*/
public function __construct($route, $defaults = array())
{
$route = trim($route, '/');
$this->_defaults = (array) $defaults;
if (!isset($this->_defaults["module"])) $this->_defaults["module"] = $route;
if (!isset($this->_defaults["controller"])) $this->_defaults["controller"] = "index";
if (!isset($this->_defaults["action"])) $this->_defaults["action"] = "public";
$this->_rootpath = $route;
}
public function match($request)
{
$path = trim($request->getPathInfo(), '/');
if (substr($path, 0, strlen($this->_rootpath)) == $this->_rootpath)
{
$values = $this->_defaults;
$values["filename"] = substr($path,strlen($this->_rootpath)+1);
return $values;
}
}
public function assemble($data = array(), $reset = false, $encode = false)
{
if (isset($data["filename"])) $filename = $data["filename"];
if (isset($data["1"])) $filename = $data["1"];
return $this->_rootpath . "/" .$filename;
}
} // END class MW_Script_Controller_Route extends Zend_Controller_Router_Route_Abstract