0

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;
4

1 に答える 1

1
$server->exec();

実際には何も返しません。php://outputヘッダー自体を設定し、出力を(実際には、組み込みの要求/応答システムを使用して)にストリーミングしようとします。

SabreDAVをsymfonyに埋め込みたい場合、これを解決する最も適切な方法は、との両方をサブクラス化Sabre\HTTP\Requestし、を呼び出す前にSabre\HTTP\Responseこれらをサーバーに設定する(->httpRequest->httpResponseプロパティを設定する)こと->execです。

オーバーライドされたリクエスト/レスポンスオブジェクトは、symfonyの同等のものにマップする必要があります。

symfonyについては、きれいに簡単にマッピングできるかどうかを十分に理解していません。実際には、symfonyのシステムを回避する方が簡単だと思います(アーキテクチャの観点からは、最も適切ではありません)。 。

于 2013-02-08T02:01:13.397 に答える