Я добавляю библиотеки slimcontroller и swift mailer в свой тонкий проект,
когда в маршруте идет хорошо
Route::get('/send', function() use ($app, $mailer) {
$message = Swift_Message::newInstance('Activation Code')
->setFrom(array('[email protected]' => 'xxx'))
->setTo(array('[email protected]' => 'xxxs'))
->setBody('Test');
// Send the message
$results = $mailer->send($message);
// Print the results, 1 = message sent!
print($results);
});
но после запуска на контроллере возникает ошибка
class MyController extends \SlimController\SlimController
{
public function getRegisters()
{
$data = (empty(\Session::flash())) ? array(
'token' => \Token::getToken()
) : array_merge(\Session::flash(), array(
'token' => \Token::getToken()
));
return $this->render('auth/register.html', $data);
}
public function postRegisters()
{
$message = Swift_Message::newInstance('Activation Code')->setFrom(array(
'[email protected]' => 'xxx'
))->setTo(array(
'[email protected]' => 'xxxs'
))->setBody('Test');
// Send the message
$results = $this->app->mailer->send($message);
}
}
Неустранимая ошибка: вызов функции-члена send () для необъекта в.
Я ссылаюсь на fortrabbit / slimcontroller
Я просто догадываюсь здесь (так как у меня нет вашего полного кода контроллера), что ваш контроллер $this->app
пустой. Тонкий не будет вводить $app
объект в ваших контроллерах.
Есть несколько способов внедрить зависимости с помощью Slim. Я не совсем уверен, какова лучшая практика здесь. Но я бы начал смотрите здесь.
Кроме того, вы можете сделать некоторые неприятные взломать в ваших контроллерах __construct
, Хотя я не рекомендую это, это будет выглядеть примерно так:
class Controller {
protected $app;
public function __construct()
{
$this->app = \Slim\Slim::getInstance();
}
}
Если вы уверены, что ваш контроллер имеет $app
собственность, то проблема в том, как вы вводите свой $mailer
пример. Как я вижу из ваших маршрутов, вы проезжаете оба $app
и $mailer
до закрытия.
Вы можете внедрить этот почтовый объект в ваше приложение как singleton. Код должен быть примерно таким:
$app->mailer = function() {
$mailer = new WhateverMailerYouAreUsing();
// ...config stuff...
return $mailer;
};
Других решений пока нет …