app/- -Classes/ -vendor/ -Resources/- - Images/ -Admin/- - Styles/ - Scripts - index.PHP - init.PHP -Public/- - Styles/ - Scripts - index.PHP - init.PHP
目前我已经创建了一个子域static.pro1.local /来提供本地图像.但现在我正在寻找其他方式.
在苗条的时候,我正在尝试根据需要制作动态创建和提供图像的路线
$app->get('/assets/:height/:width/:id/:type',function() use ($app) { header('Content-type: image/jpeg'); $dir = dirname(__DIR__)."/Resources/Images/"; $image = new Imagick($dir.$id.'.svg'); /* Code to create images based on height,width,and change its format {svg to png} as required */ $app->response->header('Content-Type','content-type: image/'.$type ); echo $image; // $res->body($image); });
我打算将它用作< img src =“/ assets / 200/400 / test / png”/>但我一直得到404错误.
我已经试过了
> http://help.slimframework.com/discussions/questions/93-how-get-image-for-a-specific-route
> http://help.slimframework.com/discussions/questions/674-best-practice-to-return-images
> http://help.slimframework.com/discussions/questions/359-file-download
> https://stackoverflow.com/questions/20439144/php-how-to-use-a-rest-controller-to-serve-images
还有其他一些.
我也找到了https://github.com/tuupola/slim-image-resize,但我需要使用SVG转换和其他一些它没有的东西.
我做了一个新的安装(“苗条/苗条”:“^ 2.6”).这是我的目录结构.
├── composer.json ├── composer.lock ├── public │ ├── .htaccess │ └── index.PHP ├── Resources │ └── Images │ └── smoke.svg └── vendor
这是我的Slim应用程序文件index.PHP.顺便说一下,我没有花时间重新调整我留给你的图像.
该应用程序包含资产路径和测试图像路径.
<?PHP require_once '../vendor/autoload.PHP'; $app = new \Slim\Slim(); $app->get('/assets/:height/:width/:id/:type',function($height,$width,$id,$type) use ($app) { $dir = dirname(__DIR__)."/Resources/Images/"; $im = new Imagick(); $im->setBackgroundColor(new ImagickPixel('transparent')); $svg = file_get_contents($dir.$id.'.svg'); $im->readImageBlob($svg); $im->setImageFormat("png32"); $im->resizeImage($height,Imagick::FILTER_LANCZOS,1); $app->response->header('Content-Type','content-type: image/'.$type ); echo $im; $im->destroy(); }); $app->get('/test-image',function() use ($app) { echo '<img src="assets/100/200/smoke/png" />'; }); $app->run();
诀窍是在.htaccess的帮助下从url中删除index.PHP
在文档中有一个用于重写URL的部分; http://docs.slimframework.com/routing/rewrite/-文档也包括Nginx指令.-
RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteRule ^ index.PHP [QSA,L]
您还需要将AllowOverride部分添加到虚拟主机文件,以便能够使用.htacess文件中的指令.这个去了virtualhost.conf
<Directory "/var/www/PUBLIC_DIRECTORY"> AllowOverride All Order allow,deny Allow from all </Directory>
不要忘记重启或重新加载apache.
然后浏览到http://< virtualhost> / test-image它应该不错.
更新:
在您发表评论后,我设置了一个安装了Nginx的docker实例.
这是我的virtualhost配置文件.
server { server_name default; root /var/www/default/public; index index.PHP; client_max_body_size 100M; fastcgi_read_timeout 1800; location / { try_files $uri /index.PHP?$args; } location ~* \.(js|css|png|jpg|jpeg|gif|ico)${ expires max; log_not_found off; access_log off; } location ~ \.PHP${ fastcgi_split_path_info ^(.+\.PHP)(/.+)$; fastcgi_pass unix:/var/run/PHP5-fpm.sock; fastcgi_index index.PHP; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; } }
并更改了PHP代码一点点使用正确的URL为图像生成器路由.我命名了路由并使用urlFor方法来检索框架本身生成的正确url.
<?PHP error_reporting(E_ALL); ini_set('display_errors',1); require_once '../vendor/autoload.PHP'; $app = new \Slim\Slim(); $app->get('/assets/:height/:width/:id/:type','content-type: image/'.$type ); echo $im; $im->destroy(); })->name('generate-image'); $app->get('/test-image',function() use ($app) { $imageUrl = $app->urlFor('generate-image',array('height' => '200','width' => '200','id' => 'smoke','type' => 'png') ); echo '<img src="'.$imageUrl.'" />'; }); $app->run();
当我浏览到http:// localhost / test-image url时,一切看起来都很完美.