Лучшие практики для чтения массива из файла в Laravel - PullRequest
0 голосов
/ 25 октября 2018

Мой вопрос может быть глупым.Но мне нужно прояснить мою концепцию об этом.

Существует несколько способов чтения массива в Laravel.как config() переменная, .env функция, trans() функция, файл читается как .csv, .txt, .json и т. д.

Может быть, все они имеют различное назначение.Но мне нужно знать, что будет хорошей практикой для чтения данных массива с моего контроллера.Пример приведен.Спасибо

Пример массива:

       [
        "mohammad" => [
           "physics" => 35,
           "maths" => 30,   
           "chemistry" => 39
        ],

        "qadir" => [
           "physics" => 30,
           "maths" => 32,
           "chemistry" => 29
        ],

        "zara" => [
           "physics" => 31,
           "maths" => 22,
           "chemistry" => 39
        ]
     ]

Ответы [ 4 ]

0 голосов
/ 21 апреля 2019

Я не знаю, является ли это наилучшей практикой, но я могу быть уверен, что он работает не только в Laravel, но и в любом другом проекте PHP.

Как уже было сказано, для чтения массива изфайл все, что вам нужно сделать, это включить этот файл, возвращенный массив , который можно присвоить переменной.

Массив должен быть возвращен в формевключенный файл, это важно

Пример:

path / to / my / array_file.php

<?php

return [

    'resource' => [

        'delete'  => 'Are you sure you want to delete this resource?',
        'updated' => 'Data for this resource has been successfully updated',
        'created' => 'Data for this resource has been successfully created',
        'deleted' => 'Data for this resource has been successfully deleted',
    ],
];

Если мне нужен доступ к этому массиву в любом местев моем проекте я могу включить его следующим образом:

$messages = include('path/to/my/array_file.php');

Теперь $ messages - это просто еще один массив php.

, если вы используете var_dump ($ messages) или dd ($ messages) в Laravelвы получите что-то вроде этого:

array:2 [▼
  "resource" => array:4 [▼
    "delete" => "Are you sure you want to delete this resource?"
    "updated" => "Data for this resource has been successfully updated"
    "created" => "Data for this resource has been successfully created"
    "deleted" => "Data for this resource has been successfully deleted"
  ]
] 
0 голосов
/ 25 октября 2018

Просто небольшая поправка к ответу выше: автор спросил о прочтении данных, поэтому они предположительно нуждаются в unserialize(file_get_contents('data.file')); Однако, я поддерживаю ответ выше, так как очень плохо хранить и читать что-то из файловой системы, а нетолько из-за одновременного чтения / записи, но также из-за проблем со скоростью / доступом к файлу / кэшированием.

0 голосов
/ 25 октября 2018

Laravel использует var_export() под капотом для кэширования конфигурации следующим образом:

$config = [
    'myvalue' => 123, 
    'mysub' => [
         'mysubvalue' => true
    ]
];
$code = '<?php return '.var_export($config, true).';'.PHP_EOL;

, где $config может быть многомерным ассоциативным массивом.если вы поместите эту строку в файл:

file_put_contents(config_path('myconf.php'), $code);

в коде, вы должны просто включить этот файл, чтобы ваша структура

$myconfig = require config_path('myconf.php');
dd($myconfig);

или (если это файл конфигурации) вызывать

echo config('myconf.myvalue');

Для извлечения значений в стиле Laravel вы можете использовать класс Illuminate \ Config \ Repository, например.

$conf = new Illuminate\Config\Repository($myconfig);
echo $conf->get('mysub.mysubvalue');

или

echo Illuminate\Support\Arr::get($myconfig, 'mysub.mysubvalue');

, надеюсь, это прояснит ипомощь

0 голосов
/ 25 октября 2018

Существуют функции serialize() и unserialize(), которые создают / загружают текстовое представление любого значения php.

Однако я бы использовал файлы только для хранения данных, если данные не сильно меняются во время выполнения,Например, для кэширования или настройки.В противном случае вы можете столкнуться с коллизиями, когда несколько сеансов одновременно пытаются прочитать / записать файл и вызвать странные ошибки

http://php.net/manual/en/function.serialize.php

Ответы на некоторые комментарии от OP:

Laravel использует файлы конфигурации, которые интерпретируются, то есть анализируются PHP после загрузки платформы.Использование таких файлов позволяет использовать некоторые опрятные языковые функции, такие как внедрение классов, позволяет создавать версии файлов конфигурации и упрощает жизнь разработчикам, поскольку в коде хранится содержимое, относящееся к конфигурации.

Для среды выполнения, специфичной для сеанса, используйте базу данных.Существует переменная $_SESSION[] для хранения временных данных.В зависимости от вашей конфигурации значения могут храниться в памяти или файлах, и PHP заботится о них.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...