使用for循环Laravel在控制器中创建公共功能

时间:2019-10-13 09:34:02

标签: laravel

我正在尝试使用for循环创建公共功能 这是我想做的事的一个例子:

class databaseController extends Controller
{
   for ($i=0; $i < 5; $i++) {
    # code...

        public function create()
        {

            // dd('hoi_tb1_create'); 
            if (Auth::guard('admin')->user()->level == 2) {
                Schema::connection('mysql')->create('tb' . $i, function (
                    $table
                ) {
                    $table->increments('id');
                });
            }

            // get all products
        }
    }
}

你知道怎么做吗?

预先感谢 声音

1 个答案:

答案 0 :(得分:0)

您可以使用第二个功能使它起作用

class LoopController extends Controller
{
    public function create($i)
    {
        if (Auth::guard('admin')->user()->level == 2) {
            Schema::connection('mysql')->create('tb' . $i, function ($table) {
                $table->increments('id');
            });
        }
    }

    public function createMany()
    {
        for($i = 0; $i < 5; $i++) {
            $this->create($i);
        }
    }
}

create函数接受$ i参数,但不会直接从路由中调用它,而是调用createMany(),其中包含一个for循环。这将调用create 5次,每次都传递其iterater值,例如0、1、2、3、4。

或者,如果希望独立调用这些函数,则可以使用PHP的magic方法动态调用create函数。例如,您可以在创建后获取所有数字,然后调用create(numbers);

class LoopController extends Controller
{
    public function create($i)
    {
        if (Auth::guard('admin')->user()->level == 2) {
            Schema::connection('mysql')->create('tb' . $i, function ($table) {
                $table->increments('id');
            });
        }
    }

    public function __call($method, $parameters)
    {
        if (preg_match('/create([\d]+)/', $method, $matches)) {
            return $this->create($matches[1]);
        }

        throw new \BadMethodCallException("Method " . get_class($this) . "::$method does not exist");
    }
}

所以现在,如果您调用LoopController-> create48();然后它将调用-> create(48);