【问题标题】:Symfony2 gets HTTP 500 error on Ajax callSymfony2 在 Ajax 调用时收到 HTTP 500 错误
【发布时间】:2014-02-11 16:53:52
【问题描述】:

我正在尝试使用 Uploadify 来处理我在 Symfony2 中的文件上传。图片上传需要调用一个控制器,在控制器内部会获取当前登录用户,根据当前用户名创建子目录,然后将文件移动到该文件夹​​。问题是当我运行 $user->getUsername() 或与 $user 对象相关的任何其他函数时,上传失败并出现 HTTP 500 错误,但是当我从 URL 运行此控制器时一切正常。

这里有一些代码:

上传的前端配置:

<script type="text/javascript">
    $(document).ready(function() {
        $('#fileupload').uploadify(
            {
                'swf': "{{ asset('javascript/uploadify.swf') }}",
                'uploader': "{{ path('EasyLife_upload_avatar')}}",
                'auto': true,
                'buttonText': "Upload Avatar",
                "buttonClass": "label",
                "height": 30,
                "width": 80,
                "onUploadSuccess": function(file, data, response) {
                    alert("Successful " + file.name + " to :" + data + ":" + response);
                },
                'onUploadError' : function(file, errorCode, errorMsg, errorString) {
                    alert('The file ' + file.name + ' could not be uploaded: ' + errorString);
                }
            });
    });
</script>

这是处理上传的控制器:

public function uploadAvatarAction() {
    $user = $this->getUser();
    $user->getUsername(); // problem appears when this line is added on an Ajax call
    $targetFolder = "upload/avatar";

    return new Response($targetFolder);
}

我实际上在其他控制器的项目中都有 $user->getUsername() ,它们都很好,即使这个也适用于直接 URL 调用,但是当被 Ajax 调用时出现问题,有多奇怪?

有人可以帮忙吗?非常感谢!

【问题讨论】:

    标签: ajax symfony upload uploadify


    【解决方案1】:

    这是因为uploadify没有随请求发送会话cookie,所以在你的控制器中$user = $this-&gt;getUser();为空。

    你可以看到我遇到的类似问题here...

    您需要创建自定义会话存储...

    <?php
    
    namespace Acme\AcmeBundle\Session;
    
    use Symfony\Component\DependencyInjection\ContainerInterface;
    use Symfony\Component\HttpFoundation\SessionStorage\NativeSessionStorage;
    
    class Storage extends NativeSessionStorage
    {
        public function __construct(array $options = array(), ContainerInterface $container)
        {
            $request = $container->get('request');
            if ($request->query->has('sessionId')) {
                $request->cookies->set(session_name(), 1);
                session_id($request->query->get('sessionId'));
            }
    
            return parent::__construct($options);
        }
    }
    

    并配置您的服务容器....

    parameters:
        session.storage.native.class: Acme\AcmeBundle\Session\Storage
    services:
        session.storage.native:
            class:     %session.storage.native.class%
            arguments: [%session.storage.options%, @service_container]
    

    【讨论】:

    • 詹姆斯,你是传奇!这正是我遇到的问题!我所做的是在 TWIG 模板中获取用户名,并将其作为参数传递给 Ajax 调用(此处专门用于 Uploadify 的“formData”),它就像一个魅力!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-10-16
    • 1970-01-01
    • 2015-09-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-24
    相关资源
    最近更新 更多