Your project must not contain invalid function or method calls 11

More information: https://insight.symfony.com/what-we-analyse/php.invalid_call

in src/SendGrid.php, line 22
  1. {
  2. $isValidInstance = $this instanceof Mailable || $this instanceof MailMessage;
  3. if ($isValidInstance && $this->mailDriver() == 'sendgrid') {
  4. $this->withSymfonyMessage(function (Email $email) use ($params) {
  5. $email->embed(static::sgEncode($params), SendgridTransport::REQUEST_BODY_PARAMETER);
    Parameter #1 $params of static method Sichikawa\LaravelSendgridDriver\Transport\SendgridTransport::sgEncode() expects array, array|null given.
    Time to fix: about 9 minutes
    Read doc Open Issue Permalink Copy Prompt
    Last edited by s-ichikawa
  6. });
  7. }
  8. return $this;
  9. }
  1. public function register()
  2. {
  3. $this->app->afterResolving(MailManager::class, function (MailManager $mail_manager) {
  4. $mail_manager->extend('sendgrid', function ($config) {
  5. if (! isset($config['api_key'])) {
  6. $config = $this->app['config']->get('services.sendgrid', []);
    Cannot call method get() on mixed.
    Time to fix: about 9 minutes
    Read doc Open Issue Permalink Copy Prompt
    Last edited by s-ichikawa
  7. }
  8. $client = new HttpClient(Arr::get($config, 'guzzle', []));
  9. $endpoint = $config['endpoint'] ?? null;
  10. return new SendgridTransport($client, $config['api_key'], $endpoint);
  1. $this->app->afterResolving(MailManager::class, function (MailManager $mail_manager) {
  2. $mail_manager->extend('sendgrid', function ($config) {
  3. if (! isset($config['api_key'])) {
  4. $config = $this->app['config']->get('services.sendgrid', []);
  5. }
  6. $client = new HttpClient(Arr::get($config, 'guzzle', []));
    Parameter #1 $array of static method Illuminate\Support\Arr::get() expects array|ArrayAccess, mixed given.
    Time to fix: about 9 minutes
    Read doc Open Issue Permalink Copy Prompt
    Last edited by s-ichikawa
  7. $endpoint = $config['endpoint'] ?? null;
  8. return new SendgridTransport($client, $config['api_key'], $endpoint);
  9. });
  1. parent::__construct();
  2. }
  3. protected function doSend(SentMessage $message): void
  4. {
  5. $email = MessageConverter::toEmail($message->getOriginalMessage());
    Parameter #1 $message of static method Symfony\Component\Mime\MessageConverter::toEmail() expects Symfony\Component\Mime\Message, Symfony\Component\Mime\RawMessage given.
    Time to fix: about 9 minutes
    Read doc Open Issue Permalink Copy Prompt
    Last edited by s-ichikawa
  6. $data = [
  7. 'personalizations' => $this->getPersonalizations($email),
  8. 'from' => $this->getFrom($email),
  9. 'subject' => $email->getSubject(),
  1. $messageId = $response->getHeaderLine('X-Message-Id');
  2. $message->setMessageId($messageId);
  3. $message->getOriginalMessage()
    Cannot call method addTextHeader() on mixed.
    Time to fix: about 9 minutes
    Read doc Open Issue Permalink Copy Prompt
    Last edited by Benjamin Ayles
  4. ->getHeaders()
  5. ->addTextHeader('X-Sendgrid-Message-Id', $messageId);
  6. }
  7. /**
  1. $messageId = $response->getHeaderLine('X-Message-Id');
  2. $message->setMessageId($messageId);
  3. $message->getOriginalMessage()
    Call to an undefined method Symfony\Component\Mime\RawMessage::getHeaders().
    Time to fix: about 9 minutes
    Read doc Open Issue Permalink Copy Prompt
    Last edited by Benjamin Ayles
  4. ->getHeaders()
  5. ->addTextHeader('X-Sendgrid-Message-Id', $messageId);
  6. }
  7. /**
  1. case 'api_key':
  2. $this->apiKey = $val;
  3. continue 2;
  4. case 'personalizations':
  5. $this->setPersonalizations($data, $val);
    Parameter #2 $personalizations of method Sichikawa\LaravelSendgridDriver\Transport\SendgridTransport::setPersonalizations() expects array, mixed given.
    Time to fix: about 9 minutes
    Read doc Open Issue Permalink Copy Prompt
    Last edited by s-ichikawa
  6. continue 2;
  7. case 'attachments':
  8. $val = array_merge($this->attachments, $val);
  9. break;
  1. case 'personalizations':
  2. $this->setPersonalizations($data, $val);
  3. continue 2;
  4. case 'attachments':
  5. $val = array_merge($this->attachments, $val);
    Parameter #1 ...$arrays of function array_merge expects array, mixed given.
    Time to fix: about 9 minutes
    Read doc Open Issue Permalink Copy Prompt
    Last edited by s-ichikawa
  6. break;
  7. }
  8. Arr::set($data, $key, $val);
  9. }
  1. case 'personalizations':
  2. $this->setPersonalizations($data, $val);
  3. continue 2;
  4. case 'attachments':
  5. $val = array_merge($this->attachments, $val);
    Parameter #2 ...$arrays of function array_merge expects array, mixed given.
    Time to fix: about 9 minutes
    Read doc Open Issue Permalink Copy Prompt
    Last edited by s-ichikawa
  6. break;
  7. }
  8. Arr::set($data, $key, $val);
  9. }
  1. *
  2. * @throws ClientException
  3. */
  4. protected function post($payload)
  5. {
  6. return $this->client->request('POST', $this->endpoint, $payload);
    Parameter #3 $options of method GuzzleHttp\Client::request() expects array{base_uri?: Psr\Http\Message\UriInterface|string, allow_redirects?: array{max?: int, strict?: bool, referer?: bool, protocols?: non-empty-array<string>, on_redirect?: callable(Psr\Http\Message\RequestInterface, Psr\Http\Message\ResponseInterface, Psr\Http\Message\UriInterface): mixed, track_redirects?: bool}|bool, auth?: array{0: string, 1: string, 2?: string|null}|string|false|null, body?: callable-object|Iterator|resource|string|Stringable|null, cert?: array{0: string, 1?: string|null}|string, cert_type?: string, connect_timeout?: float|int, cookies?: GuzzleHttp\Cookie\CookieJarInterface|false, ...}, array given.
    Time to fix: about 9 minutes
    Read doc Open Issue Permalink Copy Prompt
    Last edited by s-ichikawa
  7. }
  8. public function __toString(): string
  9. {
  10. return 'sendgrid';
  1. *
  2. * @throws ClientException
  3. */
  4. protected function post($payload)
  5. {
  6. return $this->client->request('POST', $this->endpoint, $payload);
    Parameter #2 $uri of method GuzzleHttp\Client::request() expects Psr\Http\Message\UriInterface|string, mixed given.
    Time to fix: about 9 minutes
    Read doc Open Issue Permalink Copy Prompt
    Last edited by s-ichikawa
  7. }
  8. public function __toString(): string
  9. {
  10. return 'sendgrid';

Your project should not use invalid return types 3

More information: https://insight.symfony.com/what-we-analyse/php.invalid_return_typehint

in src/SendGrid.php, line 34
  1. /**
  2. * @return string
  3. */
  4. private function mailDriver()
  5. {
  6. return function_exists('config') ? config('mail.default', config('mail.driver')) : env('MAIL_MAILER', env('MAIL_DRIVER'));
    Method Sichikawa\LaravelSendgridDriver\Transport\SendgridTransport::mailDriver() should return string but returns mixed.
    Time to fix: about 9 minutes
    Read doc Open Issue Permalink Copy Prompt
    Last edited by s-ichikawa
  7. }
  8. /**
  9. * @param array $params
  10. * @return string
in src/SendGrid.php, line 47
  1. {
  2. if (is_string($params)) {
  3. return $params;
  4. }
  5. return json_encode($params);
    Method Sichikawa\LaravelSendgridDriver\Transport\SendgridTransport::sgEncode() should return string but returns string|false.
    Time to fix: about 9 minutes
    Read doc Open Issue Permalink Copy Prompt
    Last edited by s-ichikawa
  6. }
  7. /**
  8. * @param string $strParams
  9. * @return array
  1. return $attachments;
  2. }
  3. private function getAttachmentName(DataPart $dataPart): string
  4. {
  5. return $dataPart->getPreparedHeaders()->getHeaderParameter('Content-Disposition', 'filename');
    Method Sichikawa\LaravelSendgridDriver\Transport\SendgridTransport::getAttachmentName() should return string but returns string|null.
    Time to fix: about 9 minutes
    Read doc Open Issue Permalink Copy Prompt
    Last edited by s-ichikawa
  6. }
  7. private function getAttachmentContentType(DataPart $dataPart): string
  8. {
  9. return $dataPart->getMediaType().'/'.$dataPart->getMediaSubtype();

Your project should not use invalid parameter and return typehints 6

More information: https://insight.symfony.com/what-we-analyse/php.invalid_typehint

in src/SendGrid.php, line 16
  1. {
  2. /**
  3. * @param null|array $params
  4. * @return $this
  5. */
  6. public function sendgrid($params)
    Method Sichikawa\LaravelSendgridDriver\Transport\SendgridTransport::sendgrid() has parameter $params with no value type specified in iterable type array.
    Time to fix: about 9 minutes
    Read doc Open Issue Permalink Copy Prompt
    Last edited by s-ichikawa
  7. {
  8. $isValidInstance = $this instanceof Mailable || $this instanceof MailMessage;
  9. if ($isValidInstance && $this->mailDriver() == 'sendgrid') {
  10. $this->withSymfonyMessage(function (Email $email) use ($params) {
in src/SendGrid.php, line 41
  1. /**
  2. * @param array $params
  3. * @return string
  4. */
  5. public static function sgEncode($params)
    Method Sichikawa\LaravelSendgridDriver\Transport\SendgridTransport::sgEncode() has parameter $params with no value type specified in iterable type array.
    Time to fix: about 9 minutes
    Read doc Open Issue Permalink Copy Prompt
    Last edited by s-ichikawa
  6. {
  7. if (is_string($params)) {
  8. return $params;
  9. }
  1. private function getAttachmentContentType(DataPart $dataPart): string
  2. {
  3. return $dataPart->getMediaType().'/'.$dataPart->getMediaSubtype();
  4. }
  5. private function setParameters(Email $email, array $data): array
    Method Sichikawa\LaravelSendgridDriver\Transport\SendgridTransport::setParameters() has parameter $data with no value type specified in iterable type array.
    Time to fix: about 9 minutes
    Read doc Open Issue Permalink Copy Prompt
    Last edited by s-ichikawa
  6. {
  7. $smtp_api = [];
  8. foreach ($email->getAttachments() as $attachment) {
  9. $name = $attachment->getPreparedHeaders()->getHeaderParameter('Content-Disposition', 'filename');
  10. if ($name === self::REQUEST_BODY_PARAMETER) {
  1. }
  2. return $data;
  3. }
  4. private function setPersonalizations(array &$data, array $personalizations): void
    Method Sichikawa\LaravelSendgridDriver\Transport\SendgridTransport::setPersonalizations() has parameter $data with no value type specified in iterable type array.
    Time to fix: about 9 minutes
    Read doc Open Issue Permalink Copy Prompt
    Last edited by s-ichikawa
  5. {
  6. foreach ($personalizations as $index => $params) {
  7. foreach ($params as $key => $val) {
  8. if (in_array($key, ['to', 'cc', 'bcc'])) {
  9. Arr::set($data, 'personalizations.'.$index.'.'.$key, $val);
  1. }
  2. return $data;
  3. }
  4. private function setPersonalizations(array &$data, array $personalizations): void
    Method Sichikawa\LaravelSendgridDriver\Transport\SendgridTransport::setPersonalizations() has parameter $personalizations with no value type specified in iterable type array.
    Time to fix: about 9 minutes
    Read doc Open Issue Permalink Copy Prompt
    Last edited by s-ichikawa
  5. {
  6. foreach ($personalizations as $index => $params) {
  7. foreach ($params as $key => $val) {
  8. if (in_array($key, ['to', 'cc', 'bcc'])) {
  9. Arr::set($data, 'personalizations.'.$index.'.'.$key, $val);
  1. * @param array $payload
  2. * @return ResponseInterface
  3. *
  4. * @throws ClientException
  5. */
  6. protected function post($payload)
    Method Sichikawa\LaravelSendgridDriver\Transport\SendgridTransport::post() has parameter $payload with no value type specified in iterable type array.
    Time to fix: about 9 minutes
    Read doc Open Issue Permalink Copy Prompt
    Last edited by Luke Kuzmish
  7. {
  8. return $this->client->request('POST', $this->endpoint, $payload);
  9. }
  10. public function __toString(): string

Your project should use return types 8

More information: https://insight.symfony.com/what-we-analyse/php.missing_return_typehint

in src/SendGrid.php, line 54
  1. /**
  2. * @param string $strParams
  3. * @return array
  4. */
  5. public static function sgDecode($strParams)
    Method Sichikawa\LaravelSendgridDriver\Transport\SendgridTransport::decode() return type has no value type specified in iterable type array.
    Time to fix: about 9 minutes
    Read doc Open Issue Permalink Copy Prompt
    Last edited by s-ichikawa
  6. {
  7. if (! is_string($strParams)) {
  8. return (array) $strParams;
  9. }
  10. $params = json_decode($strParams, true);
  1. }
  2. /**
  3. * @return array[]
  4. */
  5. private function getPersonalizations(Email $email): array
    Method Sichikawa\LaravelSendgridDriver\Transport\SendgridTransport::getPersonalizations() return type has no value type specified in iterable type array.
    Time to fix: about 9 minutes
    Read doc Open Issue Permalink Copy Prompt
    Last edited by s-ichikawa
  6. {
  7. $personalization['to'] = $this->setAddress($email->getTo());
  8. if (count($email->getCc()) > 0) {
  9. $personalization['cc'] = $this->setAddress($email->getCc());
  1. }
  2. /**
  3. * @param Address[] $addresses
  4. */
  5. private function setAddress(array $addresses): array
    Method Sichikawa\LaravelSendgridDriver\Transport\SendgridTransport::setAddress() return type has no value type specified in iterable type array.
    Time to fix: about 9 minutes
    Read doc Open Issue Permalink Copy Prompt
    Last edited by s-ichikawa
  6. {
  7. $recipients = [];
  8. foreach ($addresses as $address) {
  9. $recipient = ['email' => $address->getAddress()];
  10. if ($address->getName() !== '') {
  1. }
  2. return $recipients;
  3. }
  4. private function getFrom(Email $email): array
    Method Sichikawa\LaravelSendgridDriver\Transport\SendgridTransport::getFrom() return type has no value type specified in iterable type array.
    Time to fix: about 9 minutes
    Read doc Open Issue Permalink Copy Prompt
    Last edited by s-ichikawa
  5. {
  6. if (count($email->getFrom()) > 0) {
  7. foreach ($email->getFrom() as $from) {
  8. return ['email' => $from->getAddress(), 'name' => $from->getName()];
  9. }
  1. }
  2. return [];
  3. }
  4. private function getContents(Email $email): array
    Method Sichikawa\LaravelSendgridDriver\Transport\SendgridTransport::getContents() return type has no value type specified in iterable type array.
    Time to fix: about 9 minutes
    Read doc Open Issue Permalink Copy Prompt
    Last edited by s-ichikawa
  5. {
  6. $contents = [];
  7. if (! is_null($email->getTextBody())) {
  8. $contents[] = [
  9. 'type' => 'text/plain',
  1. }
  2. return $contents;
  3. }
  4. private function getReplyTo(Email $email): ?array
    Method Sichikawa\LaravelSendgridDriver\Transport\SendgridTransport::getReplyTo() return type has no value type specified in iterable type array.
    Time to fix: about 9 minutes
    Read doc Open Issue Permalink Copy Prompt
    Last edited by s-ichikawa
  5. {
  6. if (count($email->getReplyTo()) > 0) {
  7. $replyTo = $email->getReplyTo()[0];
  8. return [
  1. }
  2. return null;
  3. }
  4. private function getAttachments(Email $email): array
    Method Sichikawa\LaravelSendgridDriver\Transport\SendgridTransport::getAttachments() return type has no value type specified in iterable type array.
    Time to fix: about 9 minutes
    Read doc Open Issue Permalink Copy Prompt
    Last edited by s-ichikawa
  5. {
  6. $attachments = [];
  7. foreach ($email->getAttachments() as $attachment) {
  8. $filename = $this->getAttachmentName($attachment);
  9. if ($filename === self::REQUEST_BODY_PARAMETER) {
  1. private function getAttachmentContentType(DataPart $dataPart): string
  2. {
  3. return $dataPart->getMediaType().'/'.$dataPart->getMediaSubtype();
  4. }
  5. private function setParameters(Email $email, array $data): array
    Method Sichikawa\LaravelSendgridDriver\Transport\SendgridTransport::setParameters() return type has no value type specified in iterable type array.
    Time to fix: about 9 minutes
    Read doc Open Issue Permalink Copy Prompt
    Last edited by s-ichikawa
  6. {
  7. $smtp_api = [];
  8. foreach ($email->getAttachments() as $attachment) {
  9. $name = $attachment->getPreparedHeaders()->getHeaderParameter('Content-Disposition', 'filename');
  10. if ($name === self::REQUEST_BODY_PARAMETER) {

Your project must not contain invalid instantiations 3

More information: https://insight.symfony.com/what-we-analyse/php.invalid_instantiation

  1. $this->app->afterResolving(MailManager::class, function (MailManager $mail_manager) {
  2. $mail_manager->extend('sendgrid', function ($config) {
  3. if (! isset($config['api_key'])) {
  4. $config = $this->app['config']->get('services.sendgrid', []);
  5. }
  6. $client = new HttpClient(Arr::get($config, 'guzzle', []));
    Parameter #1 $config of class GuzzleHttp\Client constructor expects array{handler?: callable(Psr\Http\Message\RequestInterface, array<mixed>): GuzzleHttp\Promise\PromiseInterface<Psr\Http\Message\ResponseInterface, mixed>, base_uri?: Psr\Http\Message\UriInterface|string, transport_sharing?: string|null, max_host_connections?: int|null, max_total_connections?: int|null, allow_redirects?: array{max?: int, strict?: bool, referer?: bool, protocols?: non-empty-array<string>, on_redirect?: callable(Psr\Http\Message\RequestInterface, Psr\Http\Message\ResponseInterface, Psr\Http\Message\UriInterface): mixed, track_redirects?: bool}|bool, auth?: array{0: string, 1: string, 2?: string|null}|string|false|null, body?: callable-object|Iterator|resource|string|Stringable|null, ...}, mixed given.
    Last edited by s-ichikawa
  7. $endpoint = $config['endpoint'] ?? null;
  8. return new SendgridTransport($client, $config['api_key'], $endpoint);
  9. });
  1. $config = $this->app['config']->get('services.sendgrid', []);
  2. }
  3. $client = new HttpClient(Arr::get($config, 'guzzle', []));
  4. $endpoint = $config['endpoint'] ?? null;
  5. return new SendgridTransport($client, $config['api_key'], $endpoint);
    Parameter #3 $endpoint of class Sichikawa\LaravelSendgridDriver\Transport\SendgridTransport constructor expects string|null, mixed given.
    Last edited by s-ichikawa
  6. });
  7. });
  8. }
  9. }
  1. $config = $this->app['config']->get('services.sendgrid', []);
  2. }
  3. $client = new HttpClient(Arr::get($config, 'guzzle', []));
  4. $endpoint = $config['endpoint'] ?? null;
  5. return new SendgridTransport($client, $config['api_key'], $endpoint);
    Parameter #2 $api_key of class Sichikawa\LaravelSendgridDriver\Transport\SendgridTransport constructor expects string, mixed given.
    Last edited by s-ichikawa
  6. });
  7. });
  8. }
  9. }

Your project should only use iterable types in foreach loops

More information: https://insight.symfony.com/what-we-analyse/php.invalid_foreach_iterable

  1. }
  2. private function setPersonalizations(array &$data, array $personalizations): void
  3. {
  4. foreach ($personalizations as $index => $params) {
  5. foreach ($params as $key => $val) {
    Argument of an invalid type mixed supplied for foreach, only iterables are supported.
    Time to fix: about 9 minutes
    Read doc Open Issue Permalink Copy Prompt
    Last edited by s-ichikawa
  6. if (in_array($key, ['to', 'cc', 'bcc'])) {
  7. Arr::set($data, 'personalizations.'.$index.'.'.$key, $val);
  8. $this->numberOfRecipients++;
  9. } else {
  10. Arr::set($data, 'personalizations.'.$index.'.'.$key, $val);

Your project uses non-strict array lookups

More information: https://insight.symfony.com/what-we-analyse/php.strict_array_lookup

  1. private function setPersonalizations(array &$data, array $personalizations): void
  2. {
  3. foreach ($personalizations as $index => $params) {
  4. foreach ($params as $key => $val) {
  5. if (in_array($key, ['to', 'cc', 'bcc'])) {
    in_array() should be called with the third parameter set to true to enable strict comparison and avoid type juggling bugs.
    Time to fix: about 15 minutes
    Read doc Open Issue Permalink Copy Prompt
    Last edited by s-ichikawa
  6. Arr::set($data, 'personalizations.'.$index.'.'.$key, $val);
  7. $this->numberOfRecipients++;
  8. } else {
  9. Arr::set($data, 'personalizations.'.$index.'.'.$key, $val);
  10. }