0

CakeEmailを試していますが、問題が発生しています。ブログチュートリアルのadd関数と同様に、add関数にコードを追加しましたが、アイテムを追加すると、undefinedvariableと表示されます。メールコードを削除すると機能します。そのままにしてページを更新すると、アイテムは表示されますが、メールは表示されません。

関数のコードは次のとおりです。

public function add()
    {
        $this->set('isAddValid', false);
        $this->set('addValidationErrors', false);

        if ($this->request->is('post'))
        {
            // If the save is successful, close the dialog and display the success message
            // Else, set the error flags.
            if ($this->LocalClock->save($this->request->data))
            {
                $this->set('localClocks', $this->request->data);
                $this->LocalClock->save($localClocks);
                $this->set('isAddValid', true);
                $this->set('addValidationErrors', false);

                $email = new CakeEmail('smtp');
                $email->from(array('me@example.com' => 'Local Clocks'));
                $email->to('you@example.com');
                $email->subject('New Local Clock Added');
                $email->send('A new local clock has been added.');
                CakeEmail::deliver('you@example.com', 'New local Clock', 'New Local Clock Added',
                    array('from' => 'localhost@localhost'));
            }
        }

configフォルダーにあるemail.phpファイルは次のとおりです(そこにあるデフォルトのファイルから貼り付けたものをコピーしただけです)。

class EmailConfig {
    public $default = array(
        'transport' => 'Mail',
        'from' => 'you@localhost',
        //'charset' => 'utf-8',
        //'headerCharset' => 'utf-8',
    );

    public $smtp = array(
        'transport' => 'Smtp',
        'from' => array('site@localhost' => 'My Site'),
        'host' => 'localhost',
        'port' => 25,
        'timeout' => 30,
        'username' => 'user',
        'password' => 'secret',
        'client' => null,
        'log' => false,
        //'charset' => 'utf-8',
        //'headerCharset' => 'utf-8',
    );

    public $fast = array(
        'from' => 'you@localhost',
        'sender' => null,
        'to' => null,
        'cc' => null,
        'bcc' => null,
        'replyTo' => null,
        'readReceipt' => null,
        'returnPath' => null,
        'messageId' => true,
        'subject' => null,
        'message' => null,
        'headers' => null,
        'viewRender' => null,
        'template' => false,
        'layout' => false,
        'viewVars' => null,
        'attachments' => null,
        'emailFormat' => null,
        'transport' => 'Smtp',
        'host' => 'localhost',
        'port' => 25,
        'timeout' => 30,
        'username' => 'user',
        'password' => 'secret',
        'client' => null,
        'log' => true,
        //'charset' => 'utf-8',
        //'headerCharset' => 'utf-8',
    );
}

どんな助けでもいただければ幸いです

ありがとう

4

2 に答える 2

3

問題は、エラーの内容とまったく同じです-「未定義の変数:localClocks」。

$this->set('localClocks', $this->request->data);
$this->LocalClock->save($localClocks);

これは変数$localClocksを設定しません-データを変数に渡します。変数はビューからアクセスできます(ただし、コントローラーではアクセスできません)。

これに変更すると、問題がないはずです(または少なくともこの問題を乗り越えることができます)。

$this->LocalClock->save($this->request->data);

または、本当に2行に分割したい場合は、次のようにします。

$localClocks = $this->request->data;
$this->LocalClock->save($localClocks);

必要に応じて、ビューで使用する変数を「設定」することもできますが、$ this-> setを使用しても、コントローラーから変数にアクセスできるようにはなりません

于 2012-07-05T13:35:36.170 に答える
1

その答えには、email.phpファイルに別の設定を追加する必要があることがわかりました。

メール機能を使用できるようにGmailアカウントを作成しました。

コードは非常に単純です。

public $gmail = array(
        'host' => 'ssl://smtp.gmail.com',
        'port' => 465,
        'username' => 'account@gmail.com',
        'password' => 'password',
        'transport' => 'Smtp',
        'timeout' => 1
    );

そして、add()関数では:

$email = new CakeEmail('gmail');
于 2012-07-05T18:11:36.803 に答える