Я получаю Catchable фатальную ошибку с Slim 3 на моем Models
, у меня есть аналогичная настройка на моем Controllers
, и все работает отлично. Когда я реализую то же самое на моем Modal class
, я получаю следующую ошибку.Пойманная фатальная ошибка с Slim 3 в моих моделях, должен реализовать интерфейс Interop Container ContainerInterface
Catchable fatal error: Argument 1 passed to Base\Models\BaseModel::__construct() must implement interface Interop\Container\ContainerInterface, none given, called in \bootstrap\app.php on line 111 and defined in \Models\BaseModel.php on line 11
Это мой загрузочный файл
use Noodlehaus\Config;
session_start();
require __DIR__ . '/../vendor/autoload.php';
$app = new App([
'settings' => [
'determineRouteBeforeAppMiddleware' => true,
'displayErrorDetails' => true,
'addContentLengthHeader' => false
],
]);
$container = $app->getContainer();
$container['config'] = function() {
return new Config(__DIR__ . '/../config/' . file_get_contents(__DIR__ . '/../env.php') . '.php');
};
$container['mailer'] = function($container) {
return new MailgunEmail; ///LINE 110
};
require __DIR__ . '/../app/routes.php';
Это env.php
return [
'mailgun' => [
'apikey' => 'key-123456',
'domain' => 'sandbox123456.mailgun.org',
'from' => '[email protected]',
],
];
Моя базовая модель
namespace Base\Models;
use Interop\Container\ContainerInterface;
abstract class BaseModel {
protected $container;
public function __construct(ContainerInterface $container) { /// LINE 11
$this->container = $container;
}
public function __get($property) {
if($this->container->{$property}) {
return $this->container->{$property};
}
}
}
Моя электронная почта Модель
namespace Base\Models;
use Base\Models\BaseModel;
use Http\Adapter\Guzzle6\Client;
use Mailgun\Mailgun;
class MailgunEmail extends BaseModel {
public function sendWithApi($to, $subject, $html) {
$client = new Client();
/// INSTEAD OF HARD CODING LIKE THIS
$mailgun = new Mailgun('key-123456', $client);
/// I WANT TO DO SOMETHING LIKE THIS
$mailgun = new Mailgun($this->config->get('mailgun.apikey'), $client);
$domain = 'sandbox123456.mailgun.org';
$builder = $mailgun->MessageBuilder();
$builder->setFromAddress('[email protected]');
$builder->addToRecipient($to);
$builder->setSubject($subject);
$builder->setHtmlBody($html);
return $mailgun->post("{$domain}/messages", $builder->getMessage());
}
}
Я не уверен, почему я получаю эту ошибку или как могу ее исправить.
WOW, я не могу поверить, что я был так близко, спасибо кучу :-) – John