php - 在 Yii 框架外的外部 PHP 控制器中使用 Yii1.x 模型函数
问题描述
我正在开发一个 Yii1 旧网站。它与一些外部 PHP 控制器相关联。这些外部控制器提供了一些在 2 个不同应用程序之间使用的通用功能。我在模型中有一个函数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);
}
}
任何人都可以帮忙吗?
解决方案
您需要首先创建 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');
推荐阅读
- php - Magento 2:自定义类别属性 - 图片上传 Ajax 404
- vba - 如何替换电子邮件回复的正文并保留签名?
- prolog - 克隆、复制序言列表
- java - Spring Data CouchBase 配置:数据库不存在错误
- nlp - 我正在寻找用于技术产品审查的荷兰语标记器
- macos-catalina - TextWrangler 在 Mac OS Catalina 中不起作用。任何解决方法?
- python - 在 nltk python 中创建一组停用词
- widget - 自定义状态栏小部件 odoo
- reactjs - Bootstrap 在 ReactJS 应用程序中无法正常工作
- css - 来自Bottom的CSS动画没有动画