質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

解決済

1回答

618閲覧

php laravel5にて、constにヘルパ関数を使用する方法

gobindar

総合スコア51

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2019/01/29 04:03

お世話になっております。
当方Laravel5.5にてファイルアップロード機能を含むWebSiteを構築しております、
環境はmac OS Mojave10.14.2
ブラウザはGoogle Chrome バージョン: 71.0.3578.98になります。

悩んでいること

現在、アップロードファイルのパスを指定する際に、

php

1~~~ 2$full_path = configODF::OUTPUT_DIR . "/" . $this->originalFile["filename"] . ".pdf" ; 3~~~

のように指定して、
外部のconfigファイルからパスを取得しています。
これは、ストレージのパスは常に同じ箇所を見てパスを
指定したほうが保守が容易であると考えたからです。
この際configファイルにて
Laravelのヘルパ関数(storage_path())で指定した
ストレージパスを変数に格納し、constで変数を指定しようとしたところ、
constは定数の指定のため
”Constant expression contains invalid operations”
とエラーになってしまいます。
どのようにパスを変数に格納するのが最適でしょうか?

現在のconfigファイル

php

1<?php 2 3namespace App\Http\UploadFile; 4 5$storage_path = storage_path('app/public/tmp'); 6 7 class configODF { 8 const OUTPUT_DIR = $storage_path; 9}

尚、ヘルパ関数(storage_path())を使用して
パスが必要な箇所にそれぞれ記述をすることも可能かと存じます。
もし保守性を鑑みてもconfigにパスをまとめる必要がないのであればそれぞれ
記述しようかと考えております。
もしそのほうがよろしければ、ご指摘頂けますと幸甚です。

宜しくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

一箇所に設定をまとめるのは保守のために良い考えだと思います。
今回の場合は、config/filesystems.phpに新しいdiskの設定を追加し、Laravelのファイルストレージ機能のルートパスとして管理するのが良いと思います。

参考: Laravel 5.6 ファイルストレージ

設定例

config/filesystems.php

php

1// 略 2 3 'disks' => [ 4 'upload' => [ 5 'driver' => 'local', 6 'root' => storage_path('app/public/tmp'), 7 ], 8 9 ], 10// 略

利用方法

php

1// Facadeなどを利用して相対パスでファイルを保存 2$relativePath = $this->originalFile["filename"] . ".pdf"; 3\Storage::disk('upload')->put($relativePath, $fileContent);

投稿2019/01/29 04:47

編集2019/01/29 04:49
n_1215

総合スコア40

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

gobindar

2019/01/29 05:54

n_1215様 ご回答ありがとうございます。 せっかくお答え頂いたということと、 私の背景説明が不足していたため大変恐縮なのですが、 ファイルのアップロード時に、 LibreOfficeというもの(Officeファイルをpdf化する外部ツール) を使用していて、LibreOfficeの実行時にパスを渡す必要があります。 その際に利用するパスなので、 Laravel標準のdisk設定と\Storageの使用は今回のケースと異なって しまうかもしれません。 もしパスの記述をconfigファイルにて行う際は、 どのように記述すればよろしいでしょうか…?
n_1215

2019/01/29 07:20 編集

なるほど、そういう背景でしたら、Laravelのconfig機能のみ使うというのはいかがでしょうか? 参考: [Laravel 5.6 設定](https://readouble.com/laravel/5.6/ja/configuration.html#accessing-configuration-values) ###1. 独自のconfigファイルを追加 config/myconf.php(命名はご自由に) ``` <?php return [ 'upload_dir' => storage_path('app/public/tmp'), ]; ``` ### 2. config()ヘルパーなどから利用 ``` $uploadDirPath = config('myconf.upload_dir'); ``` 上記は独自のconfigファイルを追加していますが、たとえば先ほどの回答のファイルストレージと共用できそうな箇所があれば、config/filesystems.phpに追記したパスを呼び出す形もありかなと思います。 ``` $uploadDirPath = config('filesystems.disks.upload.root'); ```
gobindar

2019/02/03 05:35

ご返信が遅くなり申し訳ありません。 ご提示の方法でうまくいきました。 回答への返信であるにもかかわらず、ご丁寧にありがとうございました。 大変助かりました、 また機会がありましたら宜しくお願い致します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問