Ошибка установки пакета в Yii2 framework?

У меня есть требование использовать PHPOffice/PhpSpreadsheet, чтобы установить PhpSpreadsheet, я следовал эта ссылка.

Поэтому я установил PhpSpreadsheet в свой проект с помощью 'composer', выполнив команду

composer require phpoffice/phpspreadsheet

в командной строке при установке пишет что

Using version dev-master for phpoffice/phpspreadsheet

и был успешно установлен (к вашему сведению, проверьте снимок экрана), после установки, когда я пытался войти в свое приложение, я получаю другую ошибку, поскольку

Cannot redeclare PHPMailerAutoload() 

(ранее объявленный в «для электронных писем, я использую «phpmailer», включая путь как

require_once('../vendor/phpmailer/PHPMailerAutoload.php');

поскольку моя папка «PHPMailer» находится в папке «vendor» инфраструктуры Yii2.

Кстати, я создаю свое приложение на платформе Yii2, и я очень новичок в среде Yii2.

Может кто подскажет, как это исправить? Спасибо.

введите здесь описание изображения


person Prasad Patel    schedule 24.05.2018    source источник
comment
Вы действительно разрабатываете сайт без использования git?   -  person Synchro    schedule 24.05.2018


Ответы (1)


Вам не нужно использовать require для пакетов, установленных через composer. Об этом позаботится функция автозагрузки Yii. Вам просто нужно написать в коде соответствующие операторы use. На самом деле, почтовая программа — это компонент, объявленный в основном приложении , поэтому вам вообще не нужен оператор использования

Yii::$app->mailer->compose('/my/mail_view', ['model' => $model])
                ->setFrom([Yii::$app->params['myMail'] => 'My Name'])
                ->setTo($model->email)
                ->setSubject('My subject')
                ->send();
person Chux    schedule 24.05.2018
comment
Я вручную включил папку «PHPMailer» в «поставщик» Yii2. Вот почему я использую «требовать». Все это делается перед установкой 'phpSpreadsheet' через composer. - person Prasad Patel; 24.05.2018
comment
Нет смысла вручную включать модули в vendor. Он не будет загружаться автоматически, пока не будет правильно добавлен в классы автозагрузки композитора! И вы никогда не должны редактировать vendor вручную! - person Yupik; 24.05.2018
comment
Вам не нужно требование. Почтовая программа — это компонент, к которому можно получить доступ через Yii:$app-›mailer (см. мой обновленный ответ). - person Chux; 24.05.2018
comment
Как правило, при использовании Yii2 никогда не требуется. Если вам нужно использовать что-то, установленное через композитор, просто напишите оператор использования непосредственно перед объявлением класса вашего контроллера. - person Chux; 24.05.2018
comment
Извините, я новичок в Yii framework, поэтому я не знаю правильное использование. Я уже создал приложение на corePHP и перестраиваю этот проект на платформе Yii2. Итак, когда я создавал с использованием corePHP, я использовал «phpMailer» для электронных писем. Поэтому я должен использовать «phpMailer» только в среде Yii2. Итак, не подскажете, как им пользоваться? - person Prasad Patel; 24.05.2018
comment
@prasadchinthala у вас есть пример в моем ответе. Кроме того, ознакомьтесь с документацией по автозагрузке Yii, чтобы понять, как она работает (также ссылка на мой ответ). - person Chux; 24.05.2018
comment
Я понял ваше эмпирическое правило и тоже понял «функцию автозагрузки Yii». Я исправил это, используя «требовать» только в представлении «вход в систему» ​​и в местах моей модели, где я использую «phpmailer», например require_once('../vendor/phpmailer/PHPMailerAutoload.php') Спасибо. - person Prasad Patel; 24.05.2018
comment
Опять же, посмотрите мой ответ, у вас есть пример, иллюстрирующий, как использовать phpmailer с yii. Кроме того, я бы посоветовал вам больше узнать об автозагрузке Yii. - person Chux; 24.05.2018