Использование функции модели Yii1.x во внешнем контроллере PHP вне платформы Yii - PullRequest
1 голос
/ 10 января 2020

Я работаю над старым сайтом Yii1. который связан с некоторыми внешними PHP контроллерами. Эти внешние контроллеры предоставляют некоторые общие функции, которые используются между двумя различными приложениями. У меня есть функция в Yii модели, которую я хочу использовать в одном из внешних PHP контроллеров. Есть ли способ сделать это? В настоящее время это делается путем переписывания запроса MySQL во внешнем контроллере PHP, но я не хочу следовать этой неудачной практике.

Я нашел эту ссылку, и я могу получить доступ к 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);
 }
}

Кто-нибудь может помочь?

1 Ответ

0 голосов
/ 11 января 2020

Сначала необходимо создать приложение Yii (используя путь к файлу конфигурации), чтобы получить доступ к его моделям и контроллерам, как указано в документации . Затем вы можете получить доступ к любому классу модели во внешнем приложении так же, как и к нему в приложении Yii, и можете использовать действия контроллера, как показано ниже:

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

Если вы уже импортировали модели / контроллеры в свой Конфигурационный файл, тогда вам не нужно будет импортировать какой-либо класс, но если у вас его нет, вы можете импортировать конкретную c модель / контроллер, как показано ниже;

\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');
...