You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Laravel中的PHP数值数组转为含特定属性的对象数组?

解决方案

你可以修改themes()方法,将每个主题目录名转换为包含slug和name属性的对象,完美适配视图中的下拉选择框需求:

修改后的控制器方法

public function themes() {
    // 用DIRECTORY_SEPARATOR适配Windows/Linux路径分隔符,避免兼容性问题
    $themesPath = Config::get('view.paths')[0] . DIRECTORY_SEPARATOR . 'themes';
    
    // 借助Laravel集合简化遍历转换逻辑
    return collect(File::directories($themesPath))
        ->map(function ($themeDir) {
            // 直接获取主题目录名作为slug
            $slug = basename($themeDir);
            
            // 将kebab-case格式的slug转为友好名称,比如"clean-blog" → "Clean Blog"
            $name = str()->title(str_replace('-', ' ', $slug));
            
            // 创建对象并赋值
            $theme = new \stdClass();
            $theme->slug = $slug;
            $theme->name = $name;
            
            return $theme;
        })
        ->toArray();
}

关键细节说明

  1. 路径处理优化:用basename()替代原有的explode+array_reverse组合,更简洁安全;DIRECTORY_SEPARATOR自动适配不同系统的路径分隔符。
  2. 名称自动格式化:通过Laravel字符串辅助函数,一键将技术化的slug转换为用户友好的标题格式。
  3. 集合链式操作:用Collection简化数组处理逻辑,代码更易读、易维护。

进阶:自定义主题名称(可选)

如果需要更灵活的主题命名方式,可在每个主题目录下添加theme.json配置文件:

// themes/clean-blog/theme.json
{
    "name": "极简博客主题",
    "description": "一款干净清爽的博客主题"
}

然后修改map逻辑,优先读取配置文件中的自定义名称:

->map(function ($themeDir) {
    $slug = basename($themeDir);
    $themeConfigPath = $themeDir . DIRECTORY_SEPARATOR . 'theme.json';
    
    // 默认使用格式化后的slug,存在配置文件则优先读取
    $name = str()->title(str_replace('-', ' ', $slug));
    if (File::exists($themeConfigPath)) {
        $config = json_decode(File::get($themeConfigPath), true);
        $name = $config['name'] ?? $name;
    }
    
    $theme = new \stdClass();
    $theme->slug = $slug;
    $theme->name = $name;
    
    return $theme;
})

视图传参

在设置页面的控制器方法中,将主题数据传递给视图:

public function edit() {
    $settings = // 从数据库或配置中获取当前系统设置
    $themes = $this->themes();
    
    return view('settings.edit', compact('settings', 'themes'));
}

你的视图代码无需修改,直接使用即可。

内容的提问来源于stack exchange,提问作者Razvan Zamfir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 06:45:44