如何在元素视图中显示配置文件图像

时间:2017-10-05 07:24:08

标签: php html css cakephp cakephp-3.0

<?php
public function beforeFilter(\Cake\Event\Event $event)
 {

  $user = $this->request->session()->read('Auth.User');
  $this->set('username', $user['username']);

  $this->set('profile', $user['profile_pic'])
 }
 ?>

在上面的代码中,我可以print内部元素/文件夹/ nav.ctp中的username

<?php 
    echo $this->Html->image('users/' .stream_get_contents($profile),array('width'=>'100px','height'=>'100px'));
?>

当我打印图像时,会在下面发出警告信息。

  

警告(2):stream_get_contents()期望参数1是资源,   给定的整数[APP / Template / Element / folder / nav.ctp,第19行]

1 个答案:

答案 0 :(得分:1)

阅读错误信息,非常清楚:

  

stream_get_contents()期望参数1为资源,给定整数

所以你传递一个int而不是一个资源。在这种情况下,首先要查找方法所期望的内容。请参阅stream_get_contents()的php文档。它显然需要a stream resource。查看streamresource的内容,然后采取相应措施。

但是,您尝试的方法不会以这种方式工作,因为您没有访问文件系统中的文件。请参阅fopen()上的文档。

您必须在标记中将您的图像作为base64编码的二进制数据进行回显。请参阅此处的答案:Is it possible to put binary image data into html markup and then get the image displayed as usual in any browser?由于base64编码,这将增加图像的大小约30%。

我不会为许多大图片做这件事。从来没有和很多人一起做过,但我很确定浏览器会遇到性能问题。请注意,除了可能的性能问题之外,此解决方案可能存在安全问题。我可以想象,如果没有正确处理数据,可以利用它将不需要的东西注入页面标记。

将图像存储在未明确为此任务制作的数据库中通常被视为不良做法。将其存储在为此目的而制作的存储后端中,并引用数据库中的位置。

对于将来,如果您不了解它们并阅读文档,如果您不知道他们做了什么,请记住阅读查找错误消息