【问题标题】:Assigning Different Values in Foreach Array in php depending on values within each array being looped over根据循环遍历的每个数组中的值,在 php 中的 Foreach 数组中分配不同的值
【发布时间】:2021-12-09 11:44:59
【问题描述】:

现在我正在使用 laravel 从数据库中获取 okta 应用程序信息。我将这些行拉出并且凭据不同,因为有 2 个不同的 okta 应用程序。即每个应用程序的 client_secretredirect URI 是不同的。

现在我拉出 2 行并循环遍历并在循环中分配凭据,但问题是我不知道如何区分应用程序并在循环时为它们分配不同的凭据。

我分配凭据的服务提供商中的引导方法

public function boot(OktaApp $oktaApp, Repository $repository)
{
        $oktaApps = $oktaApp
            ->where('name', 'oktaApp1')
            ->orWhere('name', 'oktaApp2')
            ->get()->toArray();
            
    foreach ($oktaApps as $app) {
        //How do I assign creds dynamically based on app name?
        $repository['services.oktaApp1'] = [
            'client_id' => $app['client_id'],
            'client_secret' => $app['client_secret'],
            'redirect' =>  $app['redirect_uri'],
            'base_url' => $app['base_url'],
        ];
    }
}

如果我死了并从$oktaApps转储结果

array:2 [▼
  0 => array:6 [▼
    "id" => 1
    "name" => "oktaApp1"
    "client_id" => "......removed for security....."
    "client_secret" => "......removed for security....."
    "redirect_uri" => "http://localhost:8000/login/oktaApp1/callback"
    "base_url" => "......removed for security....."
  ]
  1 => array:6 [▼
    "id" => 2
   "name" => "oktaApp2"
    "client_id" => "......removed for security....."
    "client_secret" => "......removed for security....."
    "redirect_uri" => "http://localhost:8000/login/oktaApp2/callback"
    "base_url" => "......removed for security....."
  ]
]

我现在如何手动分配值(工作但硬编码)

            $repository['services.oktaApp1'] = [
                'client_id' => $app[0]['client_id'],
                'client_secret' => $app[0]['client_secret'],
                'redirect' =>  $app[0]['redirect_uri'],
                'base_url' => $app[0]['base_url'],
            ];
    
     
            $repository['services.oktaApp2'] = [
                'client_id' => $app[1]['client_id'],
                'client_secret' => $app[1]['client_secret'],
                'redirect' =>  $app[1]['redirect_uri'],
                'base_url' => $app[1]['base_url'],
            ];

【问题讨论】:

    标签: php arrays laravel


    【解决方案1】:

    您可以将$repository['services.oktaApp1'] 设为一个数组数组,因此您可以将其设为这样。

    foreach ($oktaApps as $app) {
        $repository['services'][$app['name']] = [
            'client_id' => $app['client_id'],
            'client_secret' => $app['client_secret'],
            'redirect' =>  $app['redirect_uri'],
            'base_url' => $app['base_url'],
        ];
    }
    

    我不确定这是否适合您的情况,所以请告诉我。

    【讨论】:

    • 我现在就试试这个,然后告诉你。我刚看到这个,谢谢你的回答。
    • 我一直收到这个错误```间接修改Illuminate\Config\Repository的重载元素没有效果```
    • 您能否发布将值分配给配置的代码
    • 我刚刚发布了代码,展示了我现在如何使用索引手动分配它们。同样,我想在循环中执行此操作以防止硬编码值。谢谢。
    • 我更新了答案,这行有错误$repository['services'][$app->name] =
    猜你喜欢
    • 2012-08-16
    • 1970-01-01
    • 1970-01-01
    • 2022-07-30
    • 1970-01-01
    • 1970-01-01
    • 2013-11-05
    • 2013-12-22
    • 1970-01-01
    相关资源
    最近更新 更多