laravel 如何将这个PHP数值数组转换为具有特定属性的对象数组?

gk7wooem  于 2023-01-10  发布在  PHP
关注(0)|答案(1)|浏览(163)

我正在Laravel 8中开发一个博客应用程序。
应用程序支持主题,简单地说,主题支持是这样工作的:
views目录中,我有一个包含每个主题的视图的目录。

public\themes中,我保留了每个主题的资产(CSS,Javascript)。

在 * SettingsController控制器 * 中,我有一个名为$theme_directory的变量,它包含 * 当前主题 * 的目录名。我在主题视图中使用这个变量,例如:

<link href="{{ asset('themes/' . $theme_directory . '/css/clean-blog.min.css') }}" rel="stylesheet">

从"设置"部分我可以设置当前的主题。

我现在尝试用一个选择框来替换我输入主题(目录)名称的文本字段。

public function themes() {
    $themes = [];
    $themes_path = Config::get('view.paths')[0] . '\themes';
    foreach(File::directories($themes_path) as $theme) {
        array_push($themes, array_reverse(explode('\\', $theme))[0]);
    }
    return $themes;
}

我将主题数组传递给视图:

public function index() {
  $settings = Settings::first();
  return view('dashboard/settings', [
    'settings' => $settings, 
    'themes' => $this->themes()
  ]);
}

上面的方法返回一个如下所示的数组:

[▼
    0 => "calvin"
    1 => "clean-blog"
]

目标
我需要将其转换为一个 * 对象数组 ,为上面数组的每个成员使用属性slug("clean-blog")和name("Clean blog"), 这样我就可以在视图(表单)中使用它 *:

<select name="theme_directory" id="theme" class="form-control @error('theme_directory') is-invalid @enderror">
          <option value="">Pick a theme</option>
          @foreach($themes as $theme)
          <option value="{{ $theme->slug }}" {{ $theme->slug == $settings->theme_directory  ? 'selected' : '' }}>{{ $theme->name }}</option>
          @endforeach
</select>

我如何才能做到这一点?

wlsrxk51

wlsrxk511#

只需将破折号替换为空格,然后将第一个字母大写(ucfirst函数),即可将slug转换为名称。
然后放入一个关联数组(我在这里使用compact functiom来简化)

public function themes() {
    $themes = [];
    $themes_path = Config::get('view.paths')[0] . '\themes';
    foreach(File::directories($themes_path) as $theme) {
        $slug = array_reverse(explode('\\', $theme))[0];
        $name = ucwords(str_replace('-', ' ', $slug));
        $themes[] = (object)compact('slug', 'name');
    }

    return $themes;
}

相关问题