从Laravel中的文件读取数组的最佳实践

时间:2018-10-25 06:31:31

标签: php laravel

我的问题可能很愚蠢。但是我需要清除关于它的概念。

在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
        ]
     ]

5 个答案:

答案 0 :(得分:1)

serialize()unserialize()函数可以创建/加载任何php值的文本表示形式。

但是,只有在运行时数据变化不大的情况下,我才使用文件存储数据。例如。用于缓存或配置目的。否则,当多个会话试图同时读取/写入文件并产生奇怪的错误时,您可能会遇到冲突

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

响应OP的一些评论:

Laravel使用已解释的配置文件,即框架启动后由PHP解析的配置文件。使用此类文件可以使用某些简洁的语言功能,例如类注入,允许对配置文件进行版本控制,并使与开发相关的框架内容存储在代码中,使开发人员的工作更加轻松。

对于运行时特定于会话的内容,请使用数据库。有$_SESSION[]变量用于存储临时数据。根据您的配置,这些值可以存储在内存或文件中,PHP负责处理它们。

答案 1 :(得分:1)

对上面的答案进行了小幅修改:作者询问要读取数据,因此他们大概需要public class CacheHelper : ICacheHelper { private readonly IUnitOfWork unitOfWork; public IMemoryCache Cache { get; } public CacheHelper(IUnitOfWork unitOfWork, IMemoryCache cache) { this.unitOfWork = unitOfWork; Cache = cache; } public void SetCommonCacheItems() { var cities = unitOfWork.CityRepo.GetAll(); Cache.Set("cities", cities); string obj; Cache.TryGetValue<string>("cities", out obj); } public string GetCities() { string obj; Cache.TryGetValue<string>("cities", out obj); return obj; } } 。但是,我确实支持上面的答案,因为从文件系统存储和读取内容确实是个坏主意,不仅是因为并发读写,还因为速度/文件访问/缓存问题。

答案 2 :(得分:1)

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');

希望这会澄清和帮助

答案 3 :(得分:0)

我不知道这是否是最佳实践,但是我可以肯定,它不仅在Laravel中而且在任何其他PHP项目中都有效。

话虽如此,要从文件中读取数组,您要做的就是include这个文件,返回的数组可以将其分配给变量。

  

必须从包含的文件中返回数组,这很重要

示例:

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数组。

如果您在Laravel中使用var_dump($ messages)或dd($ messages),则会得到以下内容:

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"
  ]
] 

答案 4 :(得分:0)

我想从Laravel项目的文件中导入一个简单的数组。我将文件保存在resources / appData中,并且为了加载数组,我最终在这里:

$categories = include(resource_path('appData/categories.php'));

这将从位于“ resources / appData / categories.php”中的文件加载数组,并将其保存到$ categories变量中。

该文件返回一个数组,类似于Laravel中的配置文件

 <?php
    return [
 
    ];

我不知道这是否是最佳实践。