私のRESTfulコントローラの外観は次のとおりです。Yii2安静なコントローラで追加のタスクを実行するには?
<?php
namespace backend\controllers;
use yii\rest\Controller;
use yii;
use yii\web\Response;
use yii\helpers\ArrayHelper;
class UserController extends \yii\rest\ActiveController
{
public function behaviors()
{
return ArrayHelper::merge(parent::behaviors(), [
[
'class' => 'yii\filters\ContentNegotiator',
'only' => ['view', 'index'], // in a controller
// if in a module, use the following IDs for user actions
// 'only' => ['user/view', 'user/index']
'formats' => [
'application/json' => Response::FORMAT_JSON,
],
'languages' => [
'en',
'de',
],
],
[
'class' => \yii\filters\Cors::className(),
'cors' => [
'Origin' => ['*'],
'Access-Control-Request-Method' => ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'HEAD', 'OPTIONS'],
'Access-Control-Request-Headers' => ['*'],
'Access-Control-Allow-Credentials' => true,
'Access-Control-Max-Age' => 86400,
],
],
]);
}
public $modelClass = 'backend\models\User';
public function actions()
{
}
public function sendMail(){
\t //Need to call this function on every create
\t //This should also have the information about the newly created user
}
}
これはデフォルトの動作と非常によく動作しますが、あなただけのユーザーと終了を作成することは非常に実用的ではありません。あなたは確認リンクSMSなどで電子メールを送信する必要があります、このアクションに基づいていくつかの他のモデルを更新するかもしれません。
データを保存してJSONを返すのにうまくいくので、createメソッドを完全にオーバーライドしたくありません。 私は、新しく作成されたユーザーを受け入れ、その人に電子メールを送ることのできるコールバックの種類の関数を追加することによってその機能を拡張したいだけです。
私のコードでこの関数を追加しましたが、呼び出されていません。それを上書きするために何かを書く必要がありますか? – Viky293
@ Viky293これは 'Model'クラスのメソッドです。つまり、 'backend \ models \ User'です。 'backend \ models \ User'クラスでそれを上書きする必要があります。 –
助けてくれてありがとうが、私はモデルの中に電子メールを送るためのコードを入れたくない。私はあなたが説明したのと同様の方法でafterAction()関数を試してみましたが、すべてのコントローラアクションの後にafterActionが呼び出されるため、良い解決策が見つかりません。 – Viky293