Yii2のコンポーネントは、アプリケーション内で繰り返し使用する機能をカプセル化する便利な仕組みです。この記事では、実践的なサンプルコードを交えて、コンポーネントのカスタマイズ方法を詳しく解説します。
カスタムコンポーネントを作成する
たとえば、独自の通知システムを作成するとします。以下の手順で実装できます。
コンポーネントファイルを作成
components
ディレクトリに Notifier.php
を作成します。
namespace app\components;
use Yii;
use yii\base\Component;
class Notifier extends Component
{
public $fromEmail = 'default@example.com'; // デフォルト値
/**
* 通知メールを送信する
* @param string $toEmail
* @param string $subject
* @param string $message
* @return bool
*/
public function sendEmail($toEmail, $subject, $message)
{
return Yii::$app->mailer->compose()
->setFrom($this->fromEmail)
->setTo($toEmail)
->setSubject($subject)
->setTextBody($message)
->send();
}
/**
* シンプルなログを記録
* @param string $message
*/
public function logNotification($message)
{
Yii::info($message, 'notifier');
}
}
コンポーネントをアプリケーションに登録する
アプリケーションの設定ファイル config/web.php
に登録します。
'components' => [
'notifier' => [
'class' => 'app\components\Notifier',
'fromEmail' => 'no-reply@yourapp.com', // プロパティを上書き
],
],
カスタムコンポーネントを使用する
コントローラやサービスクラスで簡単に利用できます。
namespace app\controllers;
use Yii;
use yii\web\Controller;
class SiteController extends Controller
{
public function actionSendNotification()
{
$notifier = Yii::$app->notifier;
// 通知メールを送信
$toEmail = 'user@example.com';
$subject = 'お知らせ';
$message = 'こんにちは、こちらは通知メールです!';
if ($notifier->sendEmail($toEmail, $subject, $message)) {
$notifier->logNotification("通知を $toEmail に送信しました。");
return "通知メールを送信しました!";
}
return "通知メールの送信に失敗しました。";
}
}
高度な設定を追加する
場合によっては、外部サービスとの連携やさらなる機能拡張が必要になることがあります。その際、依存性を注入する方法が役立ちます。
例: 外部SMSサービスと連携
Notifier.php
を以下のように拡張します。
namespace app\components;
use Yii;
use yii\base\Component;
class Notifier extends Component
{
public $smsService; // 外部サービスのインスタンス
/**
* SMSを送信する
* @param string $phoneNumber
* @param string $message
* @return bool
*/
public function sendSms($phoneNumber, $message)
{
if (!$this->smsService) {
throw new \Exception("SMSサービスが設定されていません。");
}
return $this->smsService->send($phoneNumber, $message);
}
}
そして、設定ファイルでSMSサービスを注入します。
'components' => [
'notifier' => [
'class' => 'app\components\Notifier',
'smsService' => [
'class' => 'app\components\SmsService', // 外部サービスの実装クラス
],
],
],
まとめ
Yii2のコンポーネントをカスタマイズすることで、再利用可能なコードを簡潔にまとめることができます。この記事で紹介した例を参考に、自分のプロジェクトに合わせたコンポーネントを設計してみてください。
ブログに掲載する際は、さらに適用例やスクリーンショットを追加して読みやすくすると良いでしょう!
アプリケーションの構造: アプリケーション・コンポーネント
コメント