1

そこで私は、メンバーシップの有効期限が切れる時期を毎月誰かに警告する、メンバー データベース用の機能を作成する任務を負っています。メンバーシップの有効期限が 6 か月以内の場合は 1 通、3 か月の場合は別のメールを送信します。大きなフープはありません。まず、次のようなモデルを作成します。

class Email extends CI_Model {

function __construct()
{
    parent::__construct();
}

// -----------------EMAIL-----------------
function emailMessage($message = 1,$recipient = 1777) { // Default "Test" Numbers
    $rInfo = $this->db->query("SELECT * FROM Members WHERE intKey = " . $recipient)->row();
    $eInfo = $this->db->query("SELECT * FROM Emails WHERE intKey = " . $message)->row(); 

    // Replacements?
    $bodyCopy = $eInfo->txtEmail;
    $bodyCopy = str_replace("[firstname]",$rInfo->strFirstName,$bodyCopy);  

    $this->load->library('email');
    $this->email->from('someone@example.com','John Q Public');
    $this->email->to($rInfo->strEmail); 
    $this->email->subject($eInfo->strTitle);
    $this->email->message($bodyCopy);
    $this->email->send();
    $this->email->clear();
}
}

すべてうまくいっています。私が構築したサイトの他の部分からこのモデルを呼び出すと、正常に動作します。Constituency に送信する必要がある在庫メールを処理するのに最適な方法です。通常、コード内では次のようになります。

$this->load->model('email');
$this->email->emailMessage(8,$this->session->userdata('memberKey'));

魅力のように機能します。以前に使用した場所と現在使用している場所の大きな違いは、次のようにループ内でモデルへの呼び出しを囲んでいることです。

public function warningEmails() {
    $this->load->model('email');
    $sql = 'SELECT
                *, FLOOR(
                    DATEDIFF(dtAccreditationEnd, now())/ 30
                )AS diff
            FROM
                tblMembers
            WHERE
                enmAccredited = "yes"
            AND dtAccreditationEnd < DATE_ADD(now(), INTERVAL 6 MONTH)
            ORDER BY
                diff
    ';  
    $emailSend = $this->db->query($sql);
    foreach ($emailSend->result() as $row) {
        if ($row->diff <= 3) {
            $letter = 10;
        } else {
            $letter = 9;
        }
        $this->email->emailMessage($letter,$row->intMembersKey);
    }
}

ループを初めて通過するときはうまく機能し、ループの次の反復で次のメッセージで失敗します。

致命的なエラー: 1033行目の /home/contract/public_html/members/application/controllers/staff.php の未定義のメソッド CI_Email::emailMessage() の呼び出し

行 1033 は次の行です。

  $this->email->emailMessage($letter,$row->intMembersKey);

このモデルを特定のインスタンスで 1 回しか呼び出せないという問題がありますか? 私は何を間違っていますか?よろしくお願いいたします。

編集: var_dump($this->email); を追加します。それが何であるかを見るために...

object(CI_Email)#30 (46) { ["useragent"]=> string(11) "CodeIgniter" ["mailpath"]=> string(18) "/usr/sbin/sendmail"
["protocol"]=>文字列(4) "メール" ["smtp_host"]=> 文字列(0) ""
["smtp_user"]=> 文字列(0) "" ["smtp_pass"]=> 文字列(0) ""
["smtp_port" ]=> string(2) "25" ["smtp_timeout"]=> int(5)
["smtp_crypto"]=> string(0) "" ["wordwrap"]=> bool(true)
["wrapchars"] => string(2) "76" ["mailtype"]=> string(4) "text"
["charset"]=> string(5) "utf-8" ["multipart"]=> string(5) "mixed" ["alt_message"]=> string(0) "" ["validate"]=>
bool(false) ["priority"]=> string(1) "3" [
"newline"]=> 文字列(1) " " ["crlf"]=> 文字列(1) " " ["send_multipart"]=>
bool(true) ["bcc_batch_mode"]=> bool(false) ["bcc_batch_size"]=> int(200) ["_safe_mode"]=> bool(false) ["_subject"]=> string(0) "" ["_body"]=> string(357) "ジェフリー、

これは、PDCA 認定が 3 か月で期限切れになることを通知するものです。メンバーシップ ダッシュボードにアクセスして、都合のよいときにすべての完了済みおよび未完了のコース課題を表示してください。メンバーシップ ダッシュボードは、完了プロセスを支援します。詳しくは、Someone@example.com または 1-800-555-1212 までお問い合わせください。" ["_finalbody"]=> string(0) ""
["_alt_boundary"]=> string(0) "" [ "_atc_boundary"]=> 文字列(0) "" ["_header_str"]=> 文字列(0) "" ["_smtp_connect"]=>
文字列(0) "" ["_encoding"]=> 文字列(4) " 8bit" ["_IP"]=>
bool(false) ["_smtp_auth"]=> bool(false) ["

string(17) "recipient@example.com" ["_cc_array"]=> array(0) { } ["_bcc_array"]=> array(0) { } ["_headers"]=> array(5) { [ "From"]=> string(54) ""誰かの例" " ["Return-Path"]=> string(28) "" ["Cc"]=> string(16) "copy@example.com" [ "Bcc"]=> 文字列(17) "blindcopy@example.com" ["件名"]=> 文字列(49) "=?utf-8?Q?PDCA_Accreditation_Expiration_Warning?=" } ["_attach_name"]=> 配列(0) { } ["_attach_type"]=> array(0) { } ["_attach_disp"]=> array(0) { } ["_protocols"]=> array(3) { [0]=> string( 4)」メール" [1]=> 文字列(8) "sendmail" [2]=> 文字列(4) "smtp" } ["_base_charsets"]=> 配列(2) { [0]=> 文字列(8) "us -ascii" [1]=> string(9) "iso-2022-" } ["_bit_depths"]=> array(2) { [0]=> string(4) "7bit" [1]=> string( 4) "8bit" } ["_priorities"]=> array(5) { [0]=> string(11) "1 (Highest)" [1]=> string(8) "2 (High)" [2 ]=> string(10) "3 (通常)" [3]=> string(7) "4 (低)" [4]=> string(10) "5 (最低)" } }_base_charsets"]=> array(2) { [0]=> string(8) "us-ascii" [1]=> string(9) "iso-2022-" } ["_bit_depths"]=> array(2 ) { [0]=> string(4) "7bit" [1]=> string(4) "8bit" } ["_priorities"]=> array(5) { [0]=> string(11) "1 (最高)" [1]=> 文字列(8) "2 (高)" [2]=> 文字列(10) "3 (通常)" [3]=> 文字列(7) "4 (低)" [ 4]=> string(10) "5 (最低)" } }_base_charsets"]=> array(2) { [0]=> string(8) "us-ascii" [1]=> string(9) "iso-2022-" } ["_bit_depths"]=> array(2 ) { [0]=> string(4) "7bit" [1]=> string(4) "8bit" } ["_priorities"]=> array(5) { [0]=> string(11) "1 (最高)" [1]=> 文字列(8) "2 (高)" [2]=> 文字列(10) "3 (通常)" [3]=> 文字列(7) "4 (低)" [ 4]=> string(10) "5 (最低)" } }[1]=> string(4) "8bit" } ["_priorities"]=> array(5) { [0]=> string(11) "1 (最高)" [1]=> string(8) " 2 (高)" [2]=> 文字列(10) "3 (通常)" [3]=> 文字列(7) "4 (低)" [4]=> 文字列(10) "5 (最低)" } }[1]=> string(4) "8bit" } ["_priorities"]=> array(5) { [0]=> string(11) "1 (最高)" [1]=> string(8) " 2 (高)" [2]=> 文字列(10) "3 (通常)" [3]=> 文字列(7) "4 (低)" [4]=> 文字列(10) "5 (最低)" } }

4

4 に答える 4

2

同様の症状がありましたが、別の問題が原因でした。最近、選択したエディターを使用してモデルのファイル名を name_model.php から Name_model.php に変更しましたが、エディターが古い name_model.php ファイルを実際に削除していないことにほとんど気づきませんでした。同じ名前で大文字と小文字が異なるディレクトリ。

モデルで新しい関数を作成していましたが、古いモデル ファイルを読み取っていたため、ディレクトリ内の実際のファイルを確認するまで数時間かかりました。

古いファイルを削除するだけで問題が解決しました。

于 2012-12-02T22:07:03.430 に答える
1

たぶん私はこれを読み間違えているのかもしれませんが、次の行はそうではありません: $this->load->library('email');

この行が書かれている電子メール ライブラリを読み込みますか? あなたは再帰的に自殺していると思います。

于 2012-08-27T17:57:34.877 に答える
1

そうすることで、公式のメール ライブラリの名前を別のものに変更してみてください。

$this->load->library('email', NULL, 'ci_email');

次に、これを実行してアクセスします。

$this->ci_email->from('someone@example.com','John Q Public');

現在の電子メール ライブラリが電子メール モデルを上書きしました。

于 2012-08-27T18:02:19.707 に答える
0

ライブラリ クラス MbSec{} を取得できませんでした

$autoload['libraries'] = array('database', 'mbsec');

またはコントローラの負荷。

$this->load->library('mbsec');

しかし、それはCapitalsで動作するようですが、それは論理に反していませんか?

$autoload['libraries'] = array('database', 'MbSec');
于 2012-11-10T11:34:59.963 に答える