Laravel:不能在php速记数组中使用helper

时间:2016-01-01 08:15:42

标签: php arrays laravel-5

PHP 5.6版。代码:

protected $siteServices = [
        1 => [
            'title' =>  'Consulting',
            'key'       =>  'service',
            'description'   =>  '',
            'file'  =>  asset('assets/img/sample/image1.jpg'), // throws error on this line
        ],
];

错误: PHP Parse error: syntax error, unexpected '(', expecting ']'

对此可以解决什么问题?

修改 通过在运行函数中移动变量而不是使其变为protected来解决。也可以通过先声明空变量然后在__constructor()

中设置值来解决

1 个答案:

答案 0 :(得分:0)

可以用不同的方式完成它。我列出了两种不同的方法。

第一种方法

protected $siteServices = [
    1 => [
        'title' =>  'Consulting',
        'key'       =>  'service',
        'description'   =>  '',
        'file'  =>  ['asset', 'assets/img/sample/image1.jpg'] // throws error on this line
    ]
];

我用一个分配给该数组中文件密钥的数组替换了函数调用。那么,现在,您想知道如何调用资产功能,是吗?这很简单。

在循环遍历该数组时,您可以这样做:

call_user_func($siteServices[1]['file'][0], $siteServices[1]['file'][1]);

那么,我们在这做什么?

首先,我们将一个数组设置为文件键,其中数组的第一个元素是函数的名称,而另一个元素是需要传递给先前定义的函数的参数的值。

因此,使用PHP的call_user_func函数,您可以调用函数给出它们的名称和参数。我希望这会帮助你。

第二种方法

我很确定你会为这个属性设置一个setter函数。因此,您可以这样做:

public function setSiteService($title, $key, $description, $file)
{
    $file = asset($file);

    $service = [
        'title' => $title,
        'key' => $key,
        'description' => $description,
        'file' => $file
    ];

    $this->siteServices[] = $service;
}

因此,setter为您完成处理部分。硬编码阵列根本不是一个好主意,你应该通过某种机制来填充。