有和没有Symfony响应系统的不同行为



我希望能够在Symfony中管理WebDAV目录(甚至重新实现文件的读写方式)。为此,我找到了SabreDAV,它本身就是一个包含所需所有基本类的框架。

我的问题是,虽然单独使用SabreDAV很容易让WebDAV服务器运行,但当我使用Symfony时,它就不能很好地工作。

如果没有Symfony,它可以归结为:

$server=新DAV\server($rootDirectory);

$server->exec();

我可以用尸体来访问我的目录。

更多信息:http://code.google.com/p/sabredav/wiki/GettingStarted

我试着用Symfony在我的控制器中做同样的事情,使用:

返回新的响应($server->exec());

但由于某些原因,尸体无法访问文件夹。我想我错过了一些关于Symfony中回复工作方式的东西,但什么?SabreDAV使用自己的http请求和响应系统,但如果(正如我所推测的)Symfony没有处理诸如$_SERVER之类的超全局变量,这应该不会成为问题。

关于Symfony中的请求和响应:http://symfony.com/doc/current/book/http_fundamentals.html#requests-和symfony 中的响应

以下是我所做的;它有点慢,肯定有更好的方法,但我暂时将就一下:Controller.php:

$path=(__DIR__.'/../../../../web/public/');
$path=realpath($path);
$publicDir= new MyClassesFSMyDirectory($path);
$server = new SabreDAVServer($publicDir);
$server->setBaseUri('/Symfony/web/app_dev.php/');

{
  $SyRequest = Request::createFromGlobals();
  $_server=$SyRequest->server->all();
  $_post=$SyRequest->request->all();
}

{
  $SaRequest=new MyClassesHTTPRequest($_server,$_post); 
  $resourceStream=false;
  $SaRequest->setBody($SyRequest->getContent($resourceStream),$resourceStream);
}

{
  $server->httpRequest=$SaRequest;
  $SaResponse=new MyClassesHTTPResponse();
  $server->httpResponse=$SaResponse;
  $server->exec();
}

{
  $content=ob_get_clean();
}

{
  $SyResponse=new Response($content,http_response_code(),headers_list());
}
return $SyResponse;
$server->exec();

并没有真正回报任何东西。它尝试自己设置头,并将输出流式传输到php://output(实际上,使用内置的请求/响应系统)。

如果您想将SabreDAV嵌入到symfony中,解决此问题的最正确方法是将SabreHTTPRequestSabreHTTPResponse都子类化,并在调用->exec之前在服务器中设置它们(设置->httpRequest->httpResponse属性)。

然后,您被覆盖的请求/响应对象应该映射到symfony的等效对象。

不过,我对symfony的了解还不够,无法告诉你它们是否清晰、容易地映射,我想在实践中,尝试围绕symfony系统工作会更简单(尽管从架构的角度来看,这不是最合适的)。

相关内容

  • 没有找到相关文章

最新更新