Laravel:方法参数绕过

Laravel: method parameter bypass

在我的 laravel (7.x) 应用程序中,我有一个名为 _index 的方法,在不同的 controllers & models 中具有完全相同的功能(获取数据以显示在网格)和参数(除了 1,它需要一个名为 available 的附加参数)。

所以,我在基本控制器中创建了一个 super method,如下所示:

Controller.php

namespace App\Http\Controllers;

use Illuminate\Routing\Controller as BaseController;

class Controller extends BaseController
{
    protected function _index($ModelClass, $status, $available = null)
    {
        # models
        $Model = new $ModelClass();

        # accessing and returning method data
        return $Model->_index(status: $status, available: $available);
    }
}

一些Controller.php

class SomeController extends Controller
{
    public function _index()
    {
        # accessing super methods
        $SomeModel = $this->_index(SomeModel::class, true);

        ...

        # rendering
        return view('some-view', compact($SomeModel));
    }
}

class SomeModel extends Model
{
    public function _index($status = null, $available = null) : array
    {
        if($available == true)
        {
            ...
        }
    }
}

另一个Controller.php

class AnotherController extends Controller
{
    public function _index()
    {
        # accessing super methods
        $AnotherModel = $this->_index(AnotherModel::class);

        ...

        # rendering
        return view('another-view', compact($AnotherModel));
    }
}

class AnotherModel extends Model
{
    public function _index($status = null) : array
    {
        ...
    }
}

只有 SomeController / index 工作正常,但其他不需要 $available 参数的控制器显示 Unknown named parameter $available

有没有办法忽略丢失的参数,因为在整个应用程序中将参数包含在其余方法中没有意义..?

我不确定这是否是正确的处理方式。

Controller.php

namespace App\Http\Controllers;

use Illuminate\Routing\Controller as BaseController;

class Controller extends BaseController
{
    protected function _index($ModelClass, $status, $available = null)
    {
        # models
        $Model = new $ModelClass();

        try
        {
            # accessing and returning method data
            return $Model->_index(status: $status, available: $available);
        }
        catch (\Throwable $th)
        {
            # handling missing parameter error/exception
            if($th->getMessage() == 'Unknown named parameter $available')
            {
                return $Model->_index(status: $status);
            }
        }
    }
}

但是,如果有人找到更好的方法来处理这个问题。然后 post 你的答案。

谢谢...