【问题标题】:Call a method from one controller inside another从一个控制器内部调用一个方法
【发布时间】:2015-04-20 14:38:37
【问题描述】:

是否可以在 Laravel 5 中从另一个控制器内部的一个控制器调用方法(不管用于访问每个方法的 http 方法)?

【问题讨论】:

  • stackoverflow.com/questions/15205239/… 的 L4 技术可能仍然有效。
  • 你当然可以做到这一点,但如果你处于必须这样做的情况,那就是代码的味道!将您需要的功能提取到一个单独的类中,然后将其注入到您的控制器中。
  • 这是一个大禁忌!你应该重构它并为此目的创建一个类,或者一个抽象类并从中扩展你的所有控制器
  • 如果可以的话,我会将您需要调用的任何函数放入一个特征中,并在需要它的控制器中使用该特征。

标签: laravel methods controller external laravel-5


【解决方案1】:

我就是这样做的。使用use 关键字使OtherController 可用。然后,您可以在实例化时调用该类中的方法。

<?php namespace App\Http\Controllers;

use App\Http\Controllers\OtherController;

class MyController extends Controller {

    public function __construct()
    {
        //Calling a method that is from the OtherController
        $result = (new OtherController)->method();
    }
}

还可以查看 Laravel 中 Command 的概念。它可能会给您比上述方法更大的灵活性。

【讨论】:

  • 这是我想做但想知道如何通过Inputs
【解决方案2】:
use App\Http\Controllers\TargetsController;

// this controller contains a function to call
class OrganizationController extends Controller {
    public function createHolidays() {
        // first create the reference of this controller
        $b = new TargetsController();
        $mob = 9898989898;
        $msg = "i am ready to send a msg";

        // parameter will be same 
        $result = $b->mytesting($msg, $mob);
        log::info('my testing function call with return value' . $result);
    }
}

// this controller calls it
class TargetsController extends Controller {
    public function mytesting($msg, $mob) {
        log::info('my testing function call');
        log::info('my mob:-' . $mob . 'my msg:-' . $msg);
        $a = 10;
        return $a;
    }
}

【讨论】:

  • 这会创建另一个控制器并调用它的方法。此外,调用的方向甚至与 cmets 中写的相反
猜你喜欢
  • 2011-09-23
  • 2012-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-01
  • 2015-09-07
相关资源
最近更新 更多