【发布时间】:2018-11-05 07:13:31
【问题描述】:
通过查看这些文档:
- http://symfony.com/doc/current/cookbook/bundles/configuration.html
- http://symfony.com/doc/current/components/dependency_injection/introduction.html#basic-usage
我已经制作了这个库:
<?php
namespace Acme\HelloBundle\DependencyInjection;
use Symfony\Component\DependencyInjection\ContainerBuilder;
use Symfony\Component\HttpKernel\DependencyInjection\ConfigurableExtension;
class Image extends ConfigurableExtension
{
/*The size of the thumbnail*/
private $thumb_max_width=100;
private $thumb_max_height=100;
/*End of: "The size of the thumbnail"*/
private $image_width=0;
private $image_height=0;
/**
*Contains the Image Data
*/
private $image=null;
protected function setThumbHeight($value)
{
$thumb_max_height=$value>0?$value:0;
}
protected function setThumbWidth($value)
{
$thumb_max_width=$value>0?$value:0;
}
/**
*Function that Loads the configuration
*/
protected function loadInternal(array $mergedConfig, ContainerBuilder $container)
{
var_dump($mergedConfig);
}
/**
*Loads a $file from $extention
*@param $file {String} The path of file
*@param $extention {String} the type or the extention of the image
*
*@return This Object Instance
*/
public function load($file)
{
$extention= exif_imagetype($file);
switch($extention)
{
case IMAGETYPE_PNG:
$this->image=imagecreatefrompng($file);
break;
case IMAGETYPE_JPEG:
$this->image=imagecreatefromjpeg($file);
break;
case IMAGETYPE_GIF:
$this->image=imagecreatefromgif($file);
break;
}
$this->image_width=imagesx($this->image);
$this->image_height=imagesy($this->image);
return $this;
}
/**
* Resizes an Image
* @param $width {Int} The new images width
* @param $height {Int} The new Images Height
*
* @return The Object Instance
*/
public function resize($width,$height)
{
$new_image=imagecreatetruecolor($width,$height);
imagecopyresampled($new_image,$this->image, 0, 0, 0, 0,$width,$height);
/*Set the new data to the Image*/
imagedestroy($this->image);
$this->image=$new_image;
/*End of: "Set the new data to the Image"*/
return $this;
}
/**
*Generates a thumbnail of the image
*The thumbnail size is retrieved from configuration
*
* @return The Object Instance
*/
public function to_thumb()
{
$width=0;
$width=0;
/*Determine the resize width and height*/
$source_aspect_ratio = $this->image_width / $this->image_height;
$thumbnail_aspect_ratio = $this->thumb_max_width / $this->thumb_max_height;
if ($this->image_width <= $this->thumb_max_width && $this->image_height <= $this->thumb_max_height)
{
$width = $this->image_width;
$height = $this->image_height;
}
elseif ($thumbnail_aspect_ratio > $source_aspect_ratio)
{
$width = (int) ($this->thumb_max_height * $source_aspect_ratio);
$height = $this->thumb_max_height;
}
else
{
$width = $this->thumb_max_width;
$height = (int) ($this->thumb_max_width / $source_aspect_ratio);
}
/*End of: "Determine the resize width and height"*/
$this->resize($width,$width);
return $this;
}
/**
*Exports the image to a file
*@param file {String} The file path
*/
public function export($file)
{
$ext = pathinfo($file, PATHINFO_EXTENSION);
$ext=strtolower($ext);
$write=false;
switch($ext)
{
case 'png':
imagesavealpha($this->image,true);
$write=imagepng($this->image,$file);
case 'jpeg':
case 'jpg':
$write=imagejpeg($this->image,$file);
case 'gif':
$write=imagegif($this->image,$file);
}
imagedestroy($this->image);
}
}
?>
上面的库位于src/AppBundle/ImageBundle/DependencyInjection/Image.php。我希望能够将它加载到实体(在 Doctrine 钩子上)或控制器中。但我不知道该怎么做。
【问题讨论】:
-
另外请记住,如果您来自
codeigniter用法,Symfony 中的模型实现变化很大。Model实际上是服务,根本没有单一的方法,所以您需要将它作为参数传递给服务的构造函数,因此您需要以“模型”实际上做一件事的方法设计您的应用程序。因此,您需要一个用于 Db I/O 的“模型”(又名Doctrine和Repository)、一个用于图像操作的“模型”以及(可选)一个“模型”将它们组合在一起。