我正在使用FOSOAuthServerBundle
和Symfony
,并且出现错误以下错误:
Could not load type "travel_oauth_server_auth"
500 Internal Server Error - Exception
这是我service.xml
文件,因为我是Symfony的新手,所以我不知道为什么会出现此错误。
<?xml version="1.0" encoding="UTF-8" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<services>
<service id="travel_oauth_server.authorize.form_type" class="travelHomeBundleFormTypeAuthorizeFormType">
</service>
<service id="travel_oauth_server.authorize.form" factory-method="createNamed" factory-service="form.factory" class="SymfonyComponentFormForm">
<argument type="service" id="travel_oauth_server.authorize.form_type" />
<argument>%travel_oauth_server_auth%</argument>
</service>
<service id="travel_oauth_server.authorize.form_handler" class="travelHomeBundleFormHandlerAuthorizeFormHandler" scope="request">
<argument type="service" id="travel_oauth_server.authorize.form" />
<argument type="service" id="request" />
<argument type="service" id="security.context" />
<argument type="service" id="fos_oauth_server.server" />
</service>
</services>
</container>
这是我AuthorizeFormType
创建的表单:
<?php
namespace TravelHomeBundleFormType;
use SymfonyComponentFormFormBuilderInterface;
use SymfonyComponentFormAbstractType;
class AuthorizeFormType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('allowAccess', 'checkbox', array(
'label' => 'Allow access',
));
}
public function getDefaultOptions(array $options)
{
return array('data_class' => 'TravelHomeBundleFormModelAuthorize');
}
public function getName()
{
return 'travel_oauth_server_authorize';
}
}
根据可能是重复的参考问题更新配置文件,但我仍然收到相同的错误
parameters:
travel_oauth_server_auth.class: TravelHomeBundleFormTypeAuthorizeFormType
services:
travel_oauth_server_auth:
class: %travel_oauth_server_auth%
老实说,我认为您需要做的就是添加
<service id="travel_oauth_server_auth" class="%travel_oauth_server_auth.class%" scope="request">
...
</service>
对于您的 XML 并摆脱 YAML 文件中的服务定义,我还看到了 2 种类型的命名空间根 travel vs Travel。您可能仍需要标记该服务,请参阅 http://symfony.com/doc/current/book/forms.html#defining-your-forms-as-services
parameters:
travel_oauth_server_auth.class: TravelHomeBundleFormTypeAuthorizeFormType
services:
travel_oauth_server_auth:
class: %travel_oauth_server_auth%
一开始就不正确,如您所愿
parameters:
travel_oauth_server_auth.class: "TravelHomeBundleFormTypeAuthorizeFormType"
services:
travel_oauth_server_auth:
class: %travel_oauth_server_auth.class%
您收到的错误
ParameterNotFoundException: The service "travel_oauth_server.authorize.form" has a dependency on a non-existent parameter "travel_oauth_server_auth" :(
是因为
<service id="travel_oauth_server.authorize.form" factory-method="createNamed" factory-service="form.factory" class="SymfonyComponentFormForm">
<argument type="service" id="travel_oauth_server.authorize.form_type" />
<argument>%travel_oauth_server_auth%</argument>
</service>
这里没有找到第二个传递的参数,它真的很难告诉你:-)(与任何其他"框架"相比)。
像这样传递参数:
<argument>%travel_oauth_server_auth%</argument>
您可以在 Symfony2 官方文档中找到更多详细信息