问题描述
我想在课堂上的捆绑软件中使用参数。
这是我的参数文件:
upload-images:
image:
crop_size: 300
我的文件:
class Configuration implements ConfigurationInterface
{
public function getConfigTreeBuilder()
{
$treeBuilder = new TreeBuilder('upload-images');
$treeBuilder->getRootNode()
->children()
->arrayNode('image')
->children()
->integerNode('save_original')->end()
->scalarNode('crop_size')->end()
->end()
->end() // twitter
->end();
return $treeBuilder;
}
}
UploadImagesExtension.PHP
class UploadImagesExtension extends Extension
{
public function load(array $configs,ContainerBuilder $container)
{
$loader = new YamlFileLoader($container,new FileLocator(dirname(__DIR__).'/Resources'));
$loader->load('services.yaml');
$configuration = new Configuration();
$config = $this->processConfiguration($configuration,$configs);
}
}
最后是我的服务班:
Rotate.PHP
在此类中,我需要参数:crop_size
我尝试了ParameterBagInterface:
use Symfony\Component\DependencyInjection\ParameterBag\ParameterBagInterface;
class Rotate
{
private $params;
public function __construct(ParameterBagInterface $params)
{
$this->params = $params;
}
public function Rotate()
{
$cropSize = $params->get('crop_size');
}
}
UserController.PHP
use verzeilberg\UploadImagesBundle\Service\Rotate;
class UserController extends AbstractController
{
/** @var UserProfileService */
private $service;
private $userService;
public function __construct(
UserProfileService $service,UserService $userService
) {
$this->service = $service;
$this->userService = $userService;
}
/**
* @param UserInterface $user
* @return Response
*/
public function profile(UserInterface $user)
{
$rotate = new Rotate();
$rotate->Rotate();
.....
...
}
Getting this error:
verzeilberg \ UploadImagesBundle \ Service \ Rotate :: __ construct()函数的参数太少,第62行的/home/vagrant/projects/diabetigraph-dev/src/Controller/User/UserController.PHP中传递了0,正好是1预期的
I have search for a solution. But did not came accross the right one.
解决方法
您遇到的错误与您的问题没有直接关系。
这是一个自动装配问题,还是您试图手动实例化该服务?请在这里分享您正在做的事情:<input asp-for="EBook" class="form-control " type="file" accept=".pdf" />
无论如何,回答您的问题:
要从参数包中访问参数,必须在扩展名中进行设置。
using (var fs = new FileStream(tempPdfPath,FileMode.Create))
{
await model.EBook.CopyToAsync(fs);
}
另外,注入整个ParameterBag对于项目来说很好,但对于捆绑包则应避免。
使用DI配置仅注入您的参数,或者使扩展实现UserController.php on line 62
,并在那里覆盖其定义。 (对于这样一个简单的任务,可能太过夸张了)
根据最新的编辑,该错误非常明显:如果要使用依赖注入,则必须使用它。没有Symfony无法为您注入它们而没有任何构造函数参数调用$rotate = new Rotate();
将会失败。
相反,通过操作将其注入:
public function profile(UserInterface $user,Rotate $rotate)
...如果启用了自动装配,它将使用Symfony的容器并注入ParameterBagInterface
。如果没有,则必须编写正确的服务定义才能完成此操作