【问题标题】:Displaying image in Zend Framework在 Zend Framework 中显示图像
【发布时间】:2012-05-04 01:24:57
【问题描述】:

我是 Zend 框架的新手,如果这是一个基本问题,请原谅我,但我有时间,显示从数据库检索到的图像。

编辑:我基本上无法访问 /public/ 文件夹中的任何资源。我猜前端控制器正在重定向 <link> 标签和 <img> 标签内的 src 请求。每次我搜索时,我都会看到人们在访问 /public/ 文件夹之外的图像时遇到问题......但只要它们存储在 /public 文件夹下,它们似乎就可以了。我做错了什么?

我在部分视图中有以下代码:

<?php
$user = Zend_Layout::getMvcInstance()->getView()->user;

?>
<section class="one-fifth first sidebar_profile">
  <div class="one-fifth first about_img"><img src="<?php if($user->picture){echo '/public/img/users/small_thumbs/'.$user->picture;}else{echo "#";}  ?>" alt="name"/>
      <p class="name"><?php  if($user) {echo $user->username; } else { echo "Username";} ?></p>

转储$user 会得到以下信息:

object(Zend_Db_Table_Row)[70]
protected '_data' => 
array
  'userID' => string '22' (length=2)
  'username' => string 'test' (length=4)
  'firstName' => string '' (length=0)
  'lastName' => string '' (length=0)
  'email' => string 'test@google.com' (length=18)
  'password' => string '098f6bcd4621d373cade4e832627b4f6' (length=32)
  'picture' => string '4fa3072fe09a5.jpg' (length=17)
  'verified' => string '1' (length=1)
  'confirm_key' => null
  'admin' => null

它持续了很长一段时间,但关键是文件在那里。查看所呈现页面的源代码,有问题的行呈现为:

<img alt="name" src="/public/img/users/small_thumbs4fa3072fe09a5.jpg">

我应该使用某种视图助手来显示这个吗?我找了又找,没找到。

【问题讨论】:

  • 您使用的是虚拟主机吗?通常,您的前端 url 中不会有 /publicpublic 将是虚拟主机定义的一部分。
  • 是的,我是。 /public/ 文件夹设置为文档根目录。我已经尝试过使用/不使用 /public/ ,但它仍然无法正常工作。即使我给出了绝对定义,我也无法在网站的任何地方访问图像。 (或css,除非我使用@import
  • 网络根目录下的标准.htaccess 将绕过实际存在的任何文件/目录的框架。如果在浏览器中输入http://yourhostname/img/users/small_thumbs4fa3072fe09a5.jpg,看不到图片?另一个想法:small_thumbs 是一个文件夹吗?如果是这样,你就少了一个斜线;正确的网址是/img/users/small_thumbs/4fa3072fe09a5.jpg
  • 缺少的斜线只是一个错字,我修复了它但得到了类似的结果。我花了几个小时查看文档,最后更改了我的 .htaccess 文件,当我回到工作机器上时,将发布最终结果作为答案。文档说 .htaccess 文件不应将与 doc_root 位于同一文件夹中的文件重定向到前端控制器,但尽管有这样的保证,但出于某种原因,我的应用程序还是这样做了。

标签: zend-framework


【解决方案1】:

从技术上讲,如果您使用框架,则不应在视图中执行逻辑。您应该在控制器和视图中执行 if/else 语句,只需执行以下操作:

<div class="one-fifth first about_img"><img src="$img"/></div>

但至于你的问题,如果你在浏览器中复制粘贴 src 属性,它会显示图片吗?

这是我的 .htaccess。它直接提供任何扩展匹配此正则表达式的文件,并将其他所有内容重定向到我的 index.php,这是我的引导文件。

RewriteEngine On
RewriteRule \.(shtml|js|ico|gif|jpg|png|css|flv|swf|swz)$ - [NC,L]
RewriteRule ^.*$ index.php

【讨论】:

  • 没有公共控制器,ZF 自动将任何请求重定向到该目录。所以没有办法像往常一样插入它。这就是为什么我问是否有一个助手来处理图像。作为记录,我可以实际检查图像是否存在。是的,确实如此。
  • 所以源渲染正确,图像单独显示,但它没有显示在您渲染的页面中?
  • 此外,if/else 逻辑适用于大约 50 个控制器的数百个页面。而且这个逻辑是局部的,而不是视图本身。
  • 我的意思是,你不能在浏览器中输入静态 url,因为 Zend 试图路由到一个不存在的 public 控制器。但是文件就在那里,我只是无法让它在任何页面上呈现。我只想知道是否有某种帮助器,用于显示应用程序目录之外资源的 url。
  • 哦。我明白了,您需要一个 .htaccess 文件,以便以 .jpg 或 .gif 或此类结尾的文件不会被路由到控制器。 Zend 就是这样做的。查看示例应用程序的 .htaccess 文件
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
相关资源
最近更新 更多