SymfonyでWebDAVディレクトリを管理できるようにしたい(そしてファイルの読み取りと書き込みの方法を再実装したい)。そうするために、私はSabreDAVを見つけました。これは、それ自体が必要なすべての基本クラスを備えたフレームワークです。
私の問題は、SabreDAVだけを使用してWebDAVサーバーを実行するのは非常に簡単ですが、Symfonyを使用するとうまく機能しないことです。
Symfonyがなければ、要約すると次のようになります。
$ server = new DAV \ Server($ rootDirectory);
$ server-> exec();
そして、cadaverを使用して自分のディレクトリにアクセスできます。
詳細はこちら:http ://code.google.com/p/sabredav/wiki/GettingStarted
私はSymfonyを使ってコントローラーで同じことをしようとしました:
新しいResponse($ server-> exec());を返します。
しかし、何らかの理由で死体はフォルダにアクセスできません。symfonyでのレスポンスの仕組みについて何かが足りないと思いますが、どうしますか?SabreDAVは独自のhttp要求と応答のシステムを使用しますが、(私が推測するように)Symfonyが$ _SERVERなどのスーパーグローバル変数を混乱させない場合、これは問題にはなりません。
Symfonyでのリクエストとレスポンスについて: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;