Laravel函数回调

时间:2017-08-15 02:12:48

标签: php laravel function callback

我需要在字符串中找到某些提示并使用这些提示调用函数

实施例

<?php
namespace App\Http\Controllers;
use App\Http\Controllers\ModulesController;

class BlockController extends Controller
{
  public function __construct()
  {
     $this->middleware('auth:members');
  }

  public function index(Request $request)
  {
     $string = "someFunction";
     $callBack = new ModulesController;
     var_dump($callBack->checkFunctions($string)); //Always its NULL
  }
}

资源示例

{{1}}

我必须像这样使用这个代码。 如果我能理解这一点,我会尽力改进它。

2 个答案:

答案 0 :(得分:1)

你错过了)

$moduleArrayId = array_search($strings ,array_column($this->modules, 'name'));

这就是为什么你一直得到默认值NULL

答案 1 :(得分:0)

试试这个:

public function checkFunctions($strings = NULL)
{
    $moduleArrayId = array_search($strings ,array_column($this->modules, 'name'));
    if($moduleArrayId !== FALSE) {
        $method = $this->modules[$moduleArrayId]['name'];
        return $this->$method();
    }
}

不确定您为了在此处发布了多少更改代码,但我建议您:

  • 使用更好的名字。
  • 不要直接从其他控制器实例化/调用控制器。控制器应仅用于处理请求,其他所有内容应移至单独的类中。
  • $modules的结构修改为关联数组,以便检查方法是否由index定义,而不是使用array_search。随着此结构的大小增加,这可以使您的代码运行得更快。

示例:

private $modules = [
    'someFunction' => [
        'maxNumber' => 50
    ]
];

// and then to check if the method is defined:
if (isset($this->modules[$strings])) {
    // ...
}