#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.php5. @Tpojka контейнер DI позаботится об этом, и обычно нет необходимости что-либо настраивать, см. «Разрешение нулевой конфигурации» на странице, на которую вы ссылаетесь
Ответ №1:
существует несколько способов доступа и использования свойств из одного класса в другой класс.
- Создайте экземпляр класса, который вы хотите использовать, в классе, который вы хотите использовать.
- Используйте класс, который вы хотите использовать в качестве признака, и назовите его «использовать» в другом классе.
- Расширьте класс, который вы хотите использовать, до класса, который вы хотите использовать.
Комментарии:
1. Извините, я думаю, что ваш ответ будет понижен, я спрашиваю об инъекциях, другие не вариант. Я знаю, что могу это сделать, но то, что я ищу, — это инъекция зависимости.