Code-Igniter: загрузка и отправка электронной почты в библиотеке - PullRequest
0 голосов
/ 16 февраля 2012

У меня есть библиотека в CodeIgniter, которая называется someclass.

class someclass extends CI_Controller {

    function __construct() {
        parent::__construct();
        $this->load->helper('url');
        $this->load->helper('form');
        $this->load->library('email');
        $this->load->database();

       // $this->load-> library('database');

    }
    function email($naar=0,$onderwerp=0,$bericht=0){
        if ($naar > 0 && $naar<10) {

            $to = "tester@test.com"
            //this is the part where it goes wrong            

            $CI =& get_instance();
            $this->load->library('email');               
            //some one said that i needed ti assign the library's
            $this->_assign_libraries();

            $this->email->from('tester@test.com', 'test');
            $this->email->to($to);
            $this->email->subject($onderwerp);
            $this->email->message("Test

                bericht :
                ".$bericht);

            $this->email->send();
            // echo $this->email-> print_debugger();
        }
    }
}

Я получаю следующую ошибку:

A PHP Error was encountered

Severity: Notice

Message: Undefined property: someclass::$email

Filename: libraries/someclass.php

Line Number: 139

Ответы [ 2 ]

7 голосов
/ 21 сентября 2012

В моем видении может быть 2 ситуации.

  1. Сначала вы можете использовать помощника .Создайте файл .php (например: general_helper.php), который можно автоматически загрузить или загрузить там, где вы будете его использовать.Автозагрузка if из config / autoload.php с «общим» именем.

Здесь вы можете создать метод с именем sendEmail

function sendEmail($naar=0,$onderwerp=0,$bericht=0)
{
    $CI =& get_instance();

        $CI->load->library('email');               
        //or autoload it from /application/config/autoload.php

        $CI->email->from('tester@test.com', 'test');
        $CI->email->to($to);
        $CI->email->subject($onderwerp);
        $CI->email->message("Test

            bericht :
            ".$bericht);

        $CI->email->send();

}

Загрузить пользовательскую библиотеку в свой контроллер и вызватьидентификатор с sendEmail(....)

  1. Вы можете расширить собственный класс библиотеки электронной почты и создать метод внутри этого класса с именем sendEmail , например:

    класс MY_Email расширяет CI_Email {публичная функция _ construct () {parent :: _construct ();} публичная функция sendEmail () ..... и т. д.}

Из вашего контроллера загрузите класс собственной библиотеки, используйте $this->load->library('email') и отправьте письмо по телефону $this->email->sendEmail(...)

0 голосов
/ 16 февраля 2012

Вы все делаете неправильно! Вы пытаетесь написать свою собственную библиотеку? Или вы пытаетесь написать контроллер для страницы?

Если вы пытаетесь написать контроллер, вам не нужно запускать функцию get_instance(). Просто расширяйте класс CI_Controller, загружайте соответствующую библиотеку, в данном случае это email, и используйте ее в соответствии с документацией. Также контроллеры должны быть помещены в папку controllers.

Но если вы пытаетесь написать библиотеку, вы не можете расширить класс CI_Controller. Вам также необходимо получить экземпляр CodeIgniter с помощью функции get_instance() и сохранить его в переменной. После этого просто используйте объект для загрузки библиотеки email и отправки электронных писем.

Кроме того, я не думаю, что вы можете вызывать метод с префиксом подчеркивания из этого класса. Я говорю о $this->_assign_libraries(). В CodeIgniter метод с префиксом подчеркивания является функцией private. Таким образом, вы не можете получить к нему доступ из своего собственного класса. (Если, конечно, это функция protected, и вы расширяете класс).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...