Laravel Вводит класс в другой класс в Laravel

#php #laravel

Вопрос:

Я пытаюсь разделить функциональные возможности на два класса и хочу внедрить один класс в другой. Однако, похоже, что Laravel не может распознать второй класс, и он всегда равен нулю.

 namespace AppServices;


use AppModelsImage;
use AppModelsOffer;
    class ImagesService {
    
        public function __construct() {
        }
    
        function saveImages(iterable $images, Offer $offer): array {
           // ... code here ! 
        }
    }
 

И класс, в который нужно ввести, это:

 namespace AppServices;

use AppModelsAction;
use AppModelsOffer;
use AppModelsOfferOption;
use IlluminateSupportFacadesAuth;
use IlluminateSupportFacadesDB;

class OffersService {

    protected $imagesService;

    function __constructor(ImagesService $imgService) {
        $this->imagesService = $imgService; //Doesn't work ! $imagesService is always null! 
    }

    function doSomething() {
        $this->imagesService->saveImages(....) // Call to a member function saveImages() on null at
        }
}
 

Комментарии:

1. Что вы пытались сделать, чтобы решить эту проблему? Где ты застрял?

2. Я не уверен, но вполне уверен, что привязка -это то, что вы ищете

3. @NicoHaase насколько я понимаю, laravel должен взглянуть на класс обслуживания ImageService и увидеть, что он нужен службе предложений в конструкторе, и внедрить его, и этот процесс является автоматическим.

4.Я бы подумал, что имя функции есть __construct , а не __constructor php.net/manual/en/language.oop5.decon.php

5. @Tpojka контейнер DI позаботится об этом, и обычно нет необходимости что-либо настраивать, см. «Разрешение нулевой конфигурации» на странице, на которую вы ссылаетесь

Ответ №1:

существует несколько способов доступа и использования свойств из одного класса в другой класс.

  1. Создайте экземпляр класса, который вы хотите использовать, в классе, который вы хотите использовать.
  2. Используйте класс, который вы хотите использовать в качестве признака, и назовите его «использовать» в другом классе.
  3. Расширьте класс, который вы хотите использовать, до класса, который вы хотите использовать.

Комментарии:

1. Извините, я думаю, что ваш ответ будет понижен, я спрашиваю об инъекциях, другие не вариант. Я знаю, что могу это сделать, но то, что я ищу, — это инъекция зависимости.