在Yii框架外使用外部PHP控制器中的Yii1.x模型函数

vyu0f0g1  于 2022-11-09  发布在  PHP
关注(0)|答案(1)|浏览(135)

我正在一个Yii1的老网站上工作。这个网站链接了一些外部PHP控制器。这些外部控制器提供了一些在两个不同的应用程序之间使用的通用函数。我有一个Yii模型中的函数,我想在其中一个外部PHP控制器中使用它。有没有办法做到这一点?目前,这是通过在PHP外部控制器中重写MySQL查询来实现的,但我不想采用这种蹩脚的做法。
我找到了这个链接,我可以从外部访问Yii,但它仍然不是很有帮助。在第三方系统中使用Yii
下面是我的代码示例:

namespace main\Helpers;

require_once('path/to/yii.php');

Class HelperClass {
 public static function yiisupport($id){
 //   I am able to access Yii variables using
     \Yii::app()->name
 // But how to access the yii model or controller functions? I need something like the follwoing
  $model =  \Yii::app()->YiiModel::model()->findByPK($id);
 }
}

有人能帮忙吗?

9udxz4iz

9udxz4iz1#

您需要首先创建Yii应用程序(使用配置文件路径)来访问它的模型和控制器,就像文档中提到的那样。然后您就可以像在您的Yii应用程序中一样在您的外部应用程序中访问任何模型类,并且您可以使用下面的控制器动作;

$controller = new \YOURController('ACTION_NAME');
$controller->ACTION_NAME();

如果您已经在配置文件中导入了模型/控制器,那么您将不需要导入任何类,但是如果您还没有导入,那么您可以像下面这样导入特定的模型/控制器;

\Yii::import('application.models.MODEL_NAME');
\Yii::import('application.controllers.CONTROLLER_NAME');

请检查以下示例;

namespace main\Helpers;

require_once('path/to/yii.php');
\Yii::createWebApplication('path/to/config.php');

Class HelperClass {
    public static function yiisupport($id){
        // Access Yii variables
        \Yii::app()->name;

        // Access yii model
        $model = \YiiModel::model()->findByPK($id);

        // Access yii controller and its actions
        $controller = new \YiiController('actionCreate');
        $controller->actionCreate();
    }
}

更新日期:

正如@rob006在下面的评论中提到的,在Yii应用程序外调用Yii控制器操作是个坏主意,但是如果你仍然想这么做,有一个更安全的方法,它遵循Yii应用程序的生命周期,这样访问过滤器和beforeAction()就会被触发。所以你可以用一个更安全的方法调用控制器操作,如下所示;

\Yii::app()->runController('route/to/action');

相关问题