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 你的答案。
谢谢...
在我的 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 你的答案。
谢谢...