인프런 커뮤니티 질문&답변

루키님의 프로필 이미지
루키

작성한 질문수

PHP 개발자의 최종 테크트리, 라라벨 강의

singleton 적용되지 않는 부분 문의드립니다.

작성

·

171

0

안녕하세요, 강의중에 bind, singleton 부분에서 singleton 적용시에도 bind 처럼 동작하여 문의드립니다.

비슷한 증상의 질문 봤어서 해당 질문 답변에 기재된 gmail 주소로 소스코드 압축하여 보내드렸습니다.

확인해주실 수 있으실까요?ㅠㅠ

 

app.php

'providers' => ServiceProvider::defaultProviders()->merge([
        /*
         * Package Service Providers...
         */

        /*
         * Application Service Providers...
         */
        App\Providers\AppServiceProvider::class,
        App\Providers\AuthServiceProvider::class,
        // App\Providers\BroadcastServiceProvider::class,
        App\Providers\EventServiceProvider::class,
        App\Providers\RouteServiceProvider::class,
        App\Providers\AProvider::class,
    ])->toArray(),

 

web.php

Route::get('/one', function () {
    for ($i=0; $i < 3; $i++)
    {
        echo app(Acontroller::class)->multiple(2);
        echo "<br />";
    }

    return "------------";
});

 

Acontroller.php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class Acontroller extends Controller
{
    // 클래스 안에서만 쓸 수 있는 내부 변수
    protected $result;
    protected $basecontroller;

    // 내부 함수의 기본값을 설정하는 __contruct (생성자)
    public function __construct(BaseController $basecontroller){
        $this->basecontroller = $basecontroller;
    }

    public function multiple($num){
        $this->result += $this->basecontroller->plus($num) * 10;
        return $this->result;
    }
}

 

BaseController.php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class BaseController extends Controller
{
    protected $result;

    public function __construct(){
        $this->result = 0;
    }

    public function plus($num){
        $this->result = $num + 5;
        return $this->result;
    }
}

 

AProvider.php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;
use App\Http\Controller\Acontroller;
use App\Http\Controller\BaseController;


class AProvider extends ServiceProvider
{
    /**
     * Register services.
     */
    public function register(): void
    {
        $this->app->singleton(Acontroller::class, function($app) {
            return new Acontroller($app->make(Basecontroller::class));
        });
    }

    /**
     * Bootstrap services.
     */
    public function boot(): void
    {

    }
}

답변 2

0

루키님의 프로필 이미지
루키
질문자

아ㅠㅠ 오타 꼼꼼히 확인했다고 생각했는데도 꼭 하나씩 발생하네요..

구조적인 이해가 부족한 탓도 있는것 같습니다.

복습하면서 다시해보겠습니다.

감사합니다!

0

백승철님의 프로필 이미지
백승철
지식공유자

보시면 AProvider.php 에 use 부분에 controller 가 아닌 controllers 로 바꾸어야 작동이 될 것으로 보입니다. 라라벨 세일 환경에서 이 같은 오타를 잡아낼 수 있는 확장 프로그램이 없어서 새로 배우시려는 분들이 많이 해매는 곳이기도 합니다.

변경전

image변경 후
image

루키님의 프로필 이미지
루키

작성한 질문수

질문하기