2013-02-07 2 views
0

Symfony에서 WebDAV 디렉토리를 관리하고 파일을 읽고 쓰는 방법을 다시 구현할 수 있기를 원합니다. 그렇게하기 위해 SabreDAV를 발견했습니다. SabreDAV는 그 자체로 필요한 모든 기본 클래스가있는 프레임 워크입니다.Symfony의 응답 시스템이 있거나없는 다른 동작

내 문제는 SabreDAV 만 사용하여 WebDAV 서버를 실행하는 것은 쉽지만 Symfony를 사용할 때는 잘 작동하지 않습니다.

심포니없이

, 그것은 아래로 비등 :

$ 서버 = 새로운 DAV의 \ 서버 ($ rootDirectory);

$ server-> exec();

그리고 cadaver를 사용하여 내 디렉토리에 액세스 할 수 있습니다. 여기

더보기 : http://code.google.com/p/sabredav/wiki/GettingStarted

내가 사용 심포니 내 컨트롤러에서 동일한 작업을 수행하려고 :

반환 새로운 응답 ($ 서버 ->를 간부 인());

그러나 어떤 이유로 cadaver는 폴더에 대한 액세스 권한이 없습니다. Symfony에서 응답이 작동하는 방식에 대해 뭔가 빠져있는 것 같지만, 뭐라 구요? SabreDAV는 자체의 HTTP 요청 및 응답 시스템을 사용하지만 Symfony가 $ _SERVER와 같은 초 글로벌 변수를 혼란에 빠뜨리지 않는다면 문제가되지 않습니다. 심포니의 요청과 응답에 대한

: http://symfony.com/doc/current/book/http_fundamentals.html#requests-and-responses-in-symfony 다음

내가 무슨 짓을했는지; 그것은 조금 느린 더 나은 방법이 있어야합니다,하지만 난 그 순간에 그와 함께 할 수 있도록합니다 : Controller.php을 :

$path=(__DIR__.'/../../../../web/public/'); 
$path=realpath($path); 
$publicDir= new \MyClasses\FS\MyDirectory($path); 
$server = new \Sabre\DAV\Server($publicDir); 
$server->setBaseUri('/Symfony/web/app_dev.php/'); 


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


{ 
    $SaRequest=new \MyClasses\HTTP\Request($_server,$_post); 
    $resourceStream=false; 
    $SaRequest->setBody($SyRequest->getContent($resourceStream),$resourceStream); 
} 


{ 
    $server->httpRequest=$SaRequest; 
    $SaResponse=new \MyClasses\HTTP\Response(); 
    $server->httpResponse=$SaResponse; 
    $server->exec(); 
} 


{ 
    $content=ob_get_clean(); 
} 


{ 
    $SyResponse=new Response($content,http_response_code(),headers_list()); 
} 

return $SyResponse; 

답변

1
$server->exec(); 

정말 아무것도 반환하지 않습니다. 헤더 자체를 설정하고 출력을 php://output (실제로는 내장 요청/응답 시스템)으로 스트리밍하려고 시도합니다.

당신이 심포니에 SabreDAV를 포함 할 경우

는이 문제를 해결하는 가장 적절한 방법은 ->exec를 호출하기 전에 Sabre\HTTP\RequestSabre\HTTP\Response 모두를 서브 클래스, 그리고합니다 ( ->httpRequest->httpResponse 속성 설정) 서버에서 다음을 설정하는 것입니다.

재정의 된 요청/응답 객체는 symfony의 해당 객체에 매핑되어야합니다.

symfony가 깔끔하고 쉽게 매핑되는지 알려주지는 못합니다. 실제로 심포니의 시스템을 해결하는 것이 더 간단 할 것이라고 상상합니다 (아키텍처 관점에서 볼 때 그렇지만 실제로는 그렇지 않습니다). 가장 적절한).

+0

감사합니다. 이미 시도했으나 상태 코드가 누락되었습니다. 그런데 SabreDAV에 감사드립니다. – MrRobinson