Обратный вызов функции Laravel

Мне нужно найти определенные реплики в строке и вызвать функции с этими репликами

пример

<?php
namespace App\Http\Controllers;
class ModulesController
{
private $modules = [ ['name' => 'someFunction','maxNumber' => 50] ];
public function checkFunctions($strings = NULL)
{
$moduleArrayId = array_search($strings ,array_column($this->modules, 'name');
if($moduleArrayId !== FALSE)
$this->$modules[$moduleArrayId]['name'];

}

public  function someFunction()
{
return "it works";
}
}

И пример ресурса

<?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

Решение

Попробуй это:

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 в ассоциативный массив, так что вы можете проверить, определен ли метод по индексу, вместо использования array_search. Это может заставить ваш код работать намного быстрее по мере увеличения размера этой структуры.

Пример: 

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

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

Другие решения

Вы пропустили ) в

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

Вот почему вы получаете значение по умолчанию NULL все время.

1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector