【问题标题】:Calling action from another controller and returning data Yii2从另一个控制器调用动作并返回数据 Yii2
【发布时间】:2018-01-31 18:26:40
【问题描述】:

我有一个控制器,我需要从另一个控制器访问一个动作并返回数据:

rest/controllers/AController

switch (@$_GET['barcodeType']) 
{
    case '1D':
    {  
            //do action Request1 from BController and return data from 
            this controller
    }
    break;

    case '2D':
    {
            //do action Request2 from BController and return data from 
            this controller
    }
    break;

    default:
    return  ['Wrong barcodeType'];
    break; 
}

soap/controllers/BController

public actionRequest1{
    //do something and return data to AController
}

public actionRequest2{
    //do something and return data to AController
}

我该怎么做?

【问题讨论】:

  • 当您说执行action 时,您指的是该控制器内的任何简单功能还是actionFunction
  • 使用参数$barcode 准备一个动作,然后根据传递的barcodeType 调用函数。不要调用不同的控制器动作。人机设备的问候。

标签: php controller yii2 return action


【解决方案1】:

如果您需要重用另一个控制器的操作,您可以这样做:

$result = Yii::$app->runAction('b/request1', ['param1' => 'value1', /* ... */]);

但我不推荐它。我建议您将逻辑移动到另一个组件,以便两个控制器都可以使用它。

【讨论】:

    【解决方案2】:

    重用另一个控制器动作的最简单方法是使用这个:

    return $this->redirect(['controller_name/index']); 
    

    虽然我不推荐它。 最好在模型中使用您想要的信息创建一个静态函数,然后在您需要的地方调用它。

    【讨论】:

    • 你为什么不推荐它?
    【解决方案3】:

    你必须在模型中做这样的工作,MVC 模式中的控制器不应该做逻辑。您的控制器应该只调用模型方法并返回结果。

    在你的情况下,你想要的模型应该扩展 yii\base\Model 并且应该像这样使用

    switch (@$_GET['barcodeType']) 
    {
        case '1D':
        {  
                return Barcode1D::doWork();
        }
        break;
    
        case '2D':
        {
                return Barcode2D::doWork();
        }
        break;
    
        default:
        return  ['Wrong barcodeType'];
        break; 
    }
    

    public actionRequest1{
        return Barcode1D::doWork();
    }
    
    public actionRequest2{
        return Barcode2D::doWork();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-11
      • 1970-01-01
      • 1970-01-01
      • 2010-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多