How do I render without my controller attempting to load a non-existent .ctp file.
This is my code:
//without this, I get an error trying to load a non-existent .ctp file. When I include it, the browser does not render the PNG file.
$this->autoRender = false;
//... get avatar code
if (!file_exists($avatarPath))
throw new Exception('Could not find file: '.$avatarPath);
$file = file_get_contents($avatarPath);
header('Content-Type: image/png');
if ($file === false)
throw new Exception('file_get_contents failed on avatarPath');
else
echo $file;
When I use $this->autoRender = false;
, the header
call appears to be ignored. Any ideas?
Read about how to send files with CakePHP. Let me quote the documentation for you:
There are times when you want to send files as responses for your requests. You can accomplish that by using
public function sendFile($id)
{
$file = $this->Attachments->getFile($id);
$this->response->file($file['path']);
// Return response object to prevent controller from trying to render
// a view.
return $this->response;
}
As shown in the above example, you must pass the file path to the method. CakePHP will send a proper content type header if it's a known file type listed in Cake\\Network\\Reponse::$_mimeTypes. You can add new types prior to calling Cake\\Network\\Response::file() by using the Cake\\Network\\Response::type() method.
If you want, you can also force a file to be downloaded instead of displayed in the browser by specifying the options:
$this->response->file(
$file['path'],
['download' => true, 'name' => 'foo']
);
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.