控制器内调用别的控制器的方法,并传参
<?php
namespace App\Tools;
use Illuminate\Routing\RouteDependencyResolverTrait as DepResolver;
trait CallActionTrait
{
use DepResolver;
private $container;
#调用别的控制器中的方法
public function callControllerMethod(string $class, string $method, array $routeParameters = [])
{
#指定容器,不指定,如果有参数传递时,会报错
$this->container = app();
#获取控制器完整路径
$controller = $this->namespace . '\\' . $class;
try {
#实例化控制器
$instance = app()->make($controller);
#获取并组装参数
$parameters = $this->resolveClassMethodDependencies($routeParameters, $instance, $method);
#调用
return $instance->callAction($method, $parameters);
}catch (\Exception $exception){
return abort(404);
}
}
}
使用
<?php
namespace App\Http\Controllers\Home;
use App\Http\Controllers\Controller;
use App\Tools\CallActionTrait;
use Illuminate\Http\Request;
class PageController extends Controller
{
use CallActionTrait;
#当前命名空间(必须要定义)
public $namespace = 'App\Http\Controllers\Home';
public function index(Request $request)
{
$controller = 'PlanController';
return $this->callControllerMethod($controller, 'index');
}
}
声明:这段代码没有优势,只是为了针对我在工作中遇到的问题的视线方案。仅此而已
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: