首页 > 解决方案 > 如何在 Laravel 5.7 中添加函数名称作为路由?

问题描述

我有一个控制器,它返回各个字段的枚举。例如

// Expected route - /api/getFamilyTypes - only GET method is allowed
public function getFamilyTypes()
{
    return [
        'Nuclear Family',
        'Joint Family'
    ];
}

我有大约 20 个这样的功能。如何在不手动为路由文件中的每个函数添加条目的情况下添加它?

提前致谢。

标签: phplaravellaravel-5routinglaravel-5.7

解决方案


在您的路线文件中,添加类似这样的内容,

Route::get('/something/{func}', 'SomeController@functionRoute');

something您想要使用的路径在哪里,您正在使用SomeController的具有 20 个功能的控制器在哪里,并且functionRoute是我们将要执行的操作。

然后在你的控制器中,做一个这样的函数,

public function functionRoute($func)
{
    return $this->$func();
}

这将使每当有人浏览/something/*您的网站时,它都会在最后执行函数名称。因此,如果您导航到/something/getFamilyTypes它将运行您的getFamilyTypes功能。

这不是特别安全。如果这样做,用户将能够运行控制器的任何方法。您可以设置这样的黑名单。

public function functionRoute($func)
{
    $blacklist = [
        'secret',
        'stuff',
    ];
    return in_array($func, $blacklist) ? redirect('/') : $this->$func();
}

或者你可以设置一个这样的白名单,

public function functionRoute($func)
{
    $whitelist = [
        'getFamilyTypes',
        'otherUserFriendlyStuff',
    ];
    return in_array($func, $whitelist) ? $this->$func() : redirect('/');
}

推荐阅读