プラグインのモデルからメール送信

binbin > プラグインのモデルからメール送信 @ 2018/6/6 18:56
App::uses('BcAppController', 'Controller');
$BcAppController = new BcAppController();
$body = '';
$email = 'test@test.com';
$BcAppControllerls->sendMail($email, 'TEST', $body, array('template'=>'plugin_name.default'));


こんな感じでプラグインのモデルからメール送信しようとしたのですが、
次のようなエラーが出てきました。

PHP Fatal error:  Call to a member function is() on null in /path/to/DocumentRoot/lib/Baser/Controller/BcAppController.php on line 179



コンストラクタのisが何をしてるのかさっぱりなんですが、
端的に考えるとモデルからは送信しない方が良いのでしょうか?

バッチ処理的なものなので、わざわざコントローラー経由するのは分かり辛いなーと思いまして、
そしてあるんだから使えないかなーと思った次第です。
よろしくお願い致します。

App::uses('CakeEmail', 'Network/Email');
$Email = new CakeEmail();

ちなみにこれなら送信できました。

引用:
basercms-4.1.1
Linux kusanagi71
CentOS Linux release 7.5.1804
Apache/2.4.33
PHP Version 5.6.36
seto > Re: プラグインのモデルからメール送信 @ 2018/6/7 10:48
こんにちは
以下のコードで動作しましたので共有です。

Controller::requestAction(['controller' => 'BcApp', 'action' => 'sendMail', 'admin' => false, 'test@test.test', 'title', 'body']);


参考URL
https://book.cakephp.org/2.0/ja/controllers.html#Controller::requestAction
binbin > Re: プラグインのモデルからメール送信 @ 2018/6/7 12:01
返信ありがとうございます!
送信できました。

しかし、sendMail第4引数のoptionsは、どうやって渡せば良いのでしょうか?
続けて申し訳ありませんが、ご存知でしたらよろしくお願い致します。

bodyの後に付けてみたり、optionsを色々試してみたのですが、次のようなエラーが出てくるか、
もしくはエラーも出さず、optionsが反映されていないかのどちらかでした。

エラーが出てoptions反映されない

Controller::requestAction(['controller' => 'BcApp', 'action' => 'sendMail', 'admin' => false,'test@test.com', 'title', $body,['template'=>'plugin_name.default']]);
Warning Error: rawurlencode() expects parameter 1 to be string, array given in [/path/to//DocumentRoot/lib/Cake/Routing/Route/CakeRoute.php, line 500]


エラーも出さず、options反映もされない
Controller::requestAction(['controller' => 'BcApp', 'action' => 'sendMail', 'admin' => false,'test@test.com', 'title', $body,'options'=>['template'=>'plugin_name.default']]);


Controller::requestAction(['controller' => 'BcApp', 'action' => 'sendMail', 'admin' => false,],['test@test.com', 'title', $body,['template'=>'plugin_name.default']]);



[追記]
関係ないとは思いますが、
App::uses('Controller', 'Controller');

Controller not foundとでて送信できなかったので、これを入れてます。
seto > Re: プラグインのモデルからメール送信 @ 2018/6/7 12:43
requestActionは、配列を渡すことができないみたいですね。

遠回りになりますが、適当なコントローラーに以下の関数を定義して、それをrequestActionで呼び出すといけそうではあります。
public function initSendMail($to, $title = '', $body = '', $template = '') {
	// requestAction以外からの呼出はエラー
	if (empty($this->request->params['requested'])) {
		throw new ForbiddenException();
	}

	$this->sendMail($to, $title, $body, ['template' => $template]);
}
binbin > Re: プラグインのモデルからメール送信 @ 2018/6/7 14:06
返信ありがとうございます。
さしあたりコントローラー経由を検討していこうと思います。
ログイン
ユーザー名:
パスワード:


  新規登録 / パスワード紛失

検索

facebook
フォーラムで悩みが解決した場合など、よかったら「いいね!」をポチっとクリックしてください!質問の回答者や開発者の励みになります

フォーラムガイド


関連リンク

オンライン状況
23 人のユーザが現在オンラインです。 (22 人のユーザが フォーラム を参照しています。)

登録ユーザ: 0
ゲスト: 23