我的问题可能很愚蠢。但是我需要清除关于它的概念。
在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
]
]
答案 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 [
];
我不知道这是否是最佳实践。