Storage :: get () приводит к исключению FileNotFoundException

Я пытаюсь загрузить внешний файл JSON в свое приложение laravel. Ниже вы найдете фрагмент моего кода.

$location = __DIR__.'/config.json';
echo $location;               // Results in correct file location
echo File::exists($location); // Return 1
echo Storage::get($location); // Throws a FileNotFound Exception

Как метод File::exists() может возвращать true, а Storage::get() генерировать исключение?

Мой файл config/filesystems.php:

<?php

return [

    'default' => env('FILESYSTEM_DRIVER', 'local'),

    'cloud' => env('FILESYSTEM_CLOUD', 's3'),

    'disks' => [

        'local' => [
            'driver' => 'local',
            'root' => storage_path('app'),
        ],

        'public' => [
            'driver' => 'local',
            'root' => storage_path('app/public'),
            'url' => env('APP_URL').'/storage',
            'visibility' => 'public',
        ],

        's3' => [
            'driver' => 's3',
            'key' => env('AWS_ACCESS_KEY_ID'),
            'secret' => env('AWS_SECRET_ACCESS_KEY'),
            'region' => env('AWS_DEFAULT_REGION'),
            'bucket' => env('AWS_BUCKET'),
        ],

    ],

];

Можете показать свой файл config/filesystems.php? (с ключом disks).

Pavel 16.03.2018 16:05

Добавил в основной пост

Sjoerd 16.03.2018 16:11
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
2
2
942
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Зачем использовать для этого класс Storage? Этот класс специально предназначен для доступа к папке хранения или внешним файловым серверам. Вы сохранили свой файл рядом с контроллером / кодом, поэтому, вероятно, проще сделать это по старинке.

$location = __DIR__.'/config.json';

if (File::exists($location)) {
    $string = file_get_contents($location);
    $json = json_decode($string, true);

    // logic
} else {
    // Do something
}

Без проблем. Взгляните и на ответ Серджио Рейса, он больше Laravel-y, а мой нет;)

Loek 16.03.2018 16:25

Вы можете попробовать получить к нему доступ через файловый фасад,

File::get($location);

Ошибка, вероятно, связана с тем, что хранилище пытается получить доступ к файлу по пути по умолчанию (./project/storage/app), а также к тому, что вы его отправляете. Мой лучший совет - добавить новый диск как это

// config/filesystems.php

'customDrive' => [
   'driver' => 'local',
   'root' => base_path(), // here put your full path
],

и получить доступ через

Storage::disk("customDrive")->get("config.json");

Источникhttps://laravel.com/docs/5.6/filesystem

Другие вопросы по теме