0

私のCakePHPアプリケーションには、自分で作成した電子メールフォームがあり、電子メールのハイパーリンクをクリックすると開きます。次に、CakeEmailを使用して送信できるように、フォームからデータを渡すにはどうすればよいですか?申し訳ありませんが、私はこれを何年にもわたって試し、http://book.cakephp.org/2.0/en/core-utility-libraries/email.htmlのすべてのドキュメントを確認しましたが、それでも理解できません。

これが私のコードです...

email.ctp

<?php $this->Html->addCrumb('New Email', '#'); ?>

<div id="email_page" class="span12">
    <div class="row">

    <?php 
        echo $this->Form->create('Email', array('controller'=>'person', 'action'=>'email_send'));
        echo $this->Form->input('email', array('class'=>'email_form','label'=>'To: ','value'=>$email['Person']['primEmail']));
        echo $this->Form->input('subject', array('class'=>'email_form','label'=>'Subject: '));
        echo $this->Form->input('message', array('class'=>'email_form email_body', 'type'=>'textarea','label'=>'Message: '));
        echo $this->Form->end('Send', array('class'=>'pull-right')); 
    ?>

    </div>
</div>

email_send.php

<?php
    $email = new CakeEmail('default');
    $email->to('email');
    $email->subject('subject');
    $email->send('message');
?>

どんな助けでも大歓迎です!

4

2 に答える 2

2

より最適化されたコードは

public function email() 
{
  //add this
  if ($this->request->is('post')) {
  $post_array = $this->request->data;

  $email    = new CakeEmail();
  $email->viewVars(array('message' => $post_array['Email']['message'] ))
     ->template('contactForm')
     ->emailFormat('html')
     ->config(array('from' => 'test@test.com' ,'to' => $post_array['Email']['email']))
     ->subject ($post_array['Email']['subject'])
     ->send();

 }

}

これは一般に、contact_form.ctp という名前の電子メール テンプレートを以下で定義できます。

/app/View/Emails/html/

データをテンプレートに渡し、要件に従ってhtmlをフォーマットします。ありがとう!

于 2012-11-21T12:13:59.797 に答える
2

フォーム データは、コントローラーで$this->request->data(書き込み可能) または$this->data(読み取り可能) で使用できます。フォームは Email と呼ばれるため、フォームが送信された後、すべてのデータが利用可能になります$this->request->data['Email']

email_send.phpController メソッドを使用する代わりに、電子メール コードを使用する理由がわかりません。email_sendフォーム アクションが に設定されているため、フォームは PersonsController に存在するメソッドを想定してい/persons/email_sendます。したがって、電子メール コードを の中email_send()に配置しPersonsController.phpます。

そう:

<?php
    public function email_send() {
      $email = new CakeEmail('default');
      $email->to($this->request->data['Email']['email']);
      $email->subject($this->request->data['Email']['subject']);
      $email->send($this->request->data['Email']['message']);
    }
?>

もちろん、これがすべて機能している場合は、適切な検証$this->request->dataを設定し、関連するデータが入力されているかどうかを確認する必要があります。

于 2012-11-21T10:14:02.143 に答える