gpt4 book ai didi

php - 如何使用我的自定义 Symfony 3.0 Library/Bundle/HowIsCalled

转载 作者:可可西里 更新时间:2023-11-01 00:57:48 27 4
gpt4 key购买 nike

通过查看这些文档:

我制作了这个库:

<?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 Hook 上)或 Controller 中。但我不知道该怎么做。

最佳答案

你做的东西太复杂了。

首先,您不能在一个包中包含一个包(您说的是 src/AppBundle/ImageBundle)。

然后,您的库不需要扩展 ConfigurableExtension
因此,在创建一个干净的独立包(php app/console generate:bundle)之后,
在其中创建一个 Util 目录,将类移动到其中并将其更改为:

namespace ImageBundle\Util;

class Image
{
// Methods
}

然后,您可以将其声明为服务:

# app/config/services.yml
acme_image:
class: ImageBundle\Util\Image

在 Controller 中,像这样使用它:

$image = $this->get('acme_image');

在实体中(无法访问服务容器),只需创建类的新实例即可:

$image = new ImageBundle\Util\Image();

请注意,Symfony 主要是一个 PHP 框架。
当然,有一些非常酷的功能和一些第一次尝试时的复杂的东西,但它仍然是 PHP。

编辑

要使用从您的服务类注入(inject)的参数,只需在您的构造函数中检索并定义它们。

例如注入(inject)学说EntityManager:

# app/config/services.yml
acme_image:
class: ImageBundle\Util\Image
arguments: [ "@doctrine.orm.entity_manager" ]

然后,从您的类中检索它:

use Doctrine\ORM\EntityManagerInterface;
// ...

class Image
{
private $em;

public function __construct(EntityManagerInterface $entityManager)
{
$this->em = $entityManager;
}

// ...

public function doSomething()
{
// Use the defined property
$repository = $this->em->getRepository(...);

// ...
}
}

关于php - 如何使用我的自定义 Symfony 3.0 Library/Bundle/HowIsCalled,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35997834/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com