【问题标题】:Problems instantiating service in SymfonySymfony 中实例化服务的问题
【发布时间】:2016-04-19 14:48:05
【问题描述】:

我在从我的 Symfony 应用程序中的控制器加载服务类时遇到问题。

服务驻留在ReadathonBundle\Payments\Ipn:

namespace ReadathonBundle\Payments;

class Ipn
{
    private $testVariable;

    /**
     * Ipn constructor.
     * @param $testVariable
     */
    public function __construct($testVariable)
    {
        $this->testVariable = $testVariable;
    }
}

我已经在 services.yml 中添加了配置设置:

parameters:
    app.ipn.testVariable: test-value

services:
    app.form.registration:
        class: ReadathonBundle\Form\UserType
        tags:
            - { name: form.type, alias: app_user_registration }

    app.ipn:
        class:  ReadathonBundle\Payments\Ipn
        arguments: ['%app.ipn.testVariable%']

我正在尝试使用以下 sn-p 调用我的控制器中的服务:

class PayPalIPNController extends Controller
{
    /**
     * PayPal IPN
     *
     */
    public function listenerAction(Request $request)
    {
        $ipn = $this->get('app.ipn');

        var_dump($ipn->testVariable);

    }

这会导致 500 错误并显示以下消息:

试图从命名空间加载类“Ipn” “ReadathonBundle\Payments”。您是否忘记了“使用”声明 另一个命名空间?

我觉得我在某个地方遗漏了一些简单的东西,但又不能完全抓住它。

问题出在哪里?

【问题讨论】:

  • 你有正确的目录结构吗?你能发帖吗?此外,您正在尝试读取对象的私有属性。这是不对的,也不会起作用。阅读有关封装的信息。最后:这个异常可以从另一个地方抛出,因为你没有任何代码试图加载你的 Ipn 类。
  • 正如@MichaelSivolobov 所指出的,请验证您的目录结构,这可能是一个错字,该类必须位于src/ReadathonBundle/Payments/Ipn.php 中,遵循默认目录结构。此外,如果您在生产中,请不要忘记清除缓存(看起来很明显但并不总是......)。

标签: php symfony service containers


【解决方案1】:

这个问题会困扰我很长时间。我花了大部分时间在这个问题上......

它不起作用,因为我在服务类文件名 *facepalm* 的末尾没有 .php。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-18
    • 2018-03-27
    • 2013-04-25
    • 1970-01-01
    相关资源
    最近更新 更多