Laravel ckeditor+kcfinderのURLとディレクトリの設定

Laravel(Laravelに限ったことではなくフレームワーク)とckeditor+kcfinderのURLとディレクトリの設定が
URLに依存しまくりで非常に汎用性に乏しい。。。

つまり、そのまま使おうとすると
URLとディレクトリをベタ書きし
開発環境、本番環境、あるいは別のサイトを構築するたびに
環境ごとにURLとディレクトリの文字列を変更しなくてはならない。

絶対忘れるし、ソース管理も面倒くさいので改善してみた。

まず、ckeditor側
ckeditorを配置したフォルダにあるconfig.js。
jsである時点でphpの関数使えず、相対的な指定ができない。

なので、config.jsに記述をするのではなく
view側で以下のような記述をしてURL変更時も対処しなくて良いようにする。

filebrowserImageBrowseUrl: '<?= url('') ?>/assets/js/kcfinder/browse.php?type=images',
filebrowserImageUploadUrl: '<?= url('') ?>/assets/js/kcfinder/upload.php?type=images',
filebrowserBrowseUrl: '<?= url('') ?>/assets/js/kcfinder/browse.php?type=files',
filebrowserUploadUrl: '<?= url('') ?>/assets/js/kcfinder/upload.php?type=files',

そして、kcfinder側
kcfinderを配置したフォルダのconf/config.php。

問題は以下の2つの項目

'uploadURL'			// 画像アップロード先URL
'uploadDir'			// 画像アップロード先ディレクトリ

‘uploadURL’はこうすれば良い?

'uploadURL' => 'https://'.$_SERVER['HTTP_HOST']."/assets/js/kcfinder/upload/"

確かにドキュメントルート直下に配置する場合はこれで問題ない。

でも、開発環境の場合、ドキュメントルート直下に複数のプロジェクトのディレクトリがあってとか
本番環境など、URLに下駄を履かせるとずれてくる。

それで、プログラムでどうにかしようにも

return array(
    'uploadURL' => ''
);

配列なのでif文とか書けない。。。

と思ったら、こういう時にクロージャなんだ!!
例えばこんな感じ。

    'uploadURL' => (function(){
        $uri = (empty($_SERVER['HTTPS']) ? 'http://' : 'https://') . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
        $pos = strpos($uri, '/kcfinder/');
        $url = substr($uri, 0, $pos + strlen('/kcfinder/') - 1).'/upload/';
        return $url;
    })(),

‘uploadDir’の方は

'uploadDir' => __DIR__.'/../upload',

として、カレントディレクトリから求めるようにした。

一応、これで環境ごとにckeditorとkcfinderの設定は触らなくてよくなった。

※実際の設定値は、ご自身のディレクトリ構造に沿って設定して下さい。

返信を残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です