질문을 삭제하지 말아주세요.!
 
1
0
-1

제목에 써놓은데로 입니다.

일단 제가 어떻게 했는지에 대해서 써보겠습니다.


composer init으로 composer 프로젝트를 하나 만듭니다.
그리고선

./app/Event/TestEvent.php
위와 같은 디렉토리 경로에
위와 같은 php파일을 만들고 그 안에

=========1.code============

<?php

namespace App\Event;

class TestEvent {
public $value = 10;
public function getValue() {
$this->value;
}
}

=========1.codeEnd=========

위와 같은 내용을 입력했습니다.


그리고


composer.json 파일에

=========2.code============

"autoload": {
"psr-4": {
"App\\": "app/"
}
}

=========2.codeEnd=========

위와 같은 내용을 추가하고서

composer dump-autoload
명령을 실행했습니다.

그러면 vendor폴더가 생성되면서
그 안에 autoload와 관련된 디렉토리 및 파일들이 생성되는데

그 중에서
vendor/composer/autoload_psr4.php
파일을 열어보면

=========3.code============

return array(
'App\\' => array($baseDir . '/app'),
);

=========3.codeEnd=========

위처럼 array에 제가 입력해놓은 사항이 등록된걸 확인할 수 있었습니다.


그리고 다시


프로젝트의 최상위 디렉토리에서
index.php파일을 생성합니다.

그리고 그 안에

=========4.code============

<?php

require 'vender/autoload.php';

use App\Event;

=========4.codeEnd=========

위와 같은 코드를 입력했고,

그와 동시에 브라우저에서는

<결과>
     "페이지가 작동하지 않습니다."
</결과>
위와 같은 결과를 확인할 수 있었습니다.


아시는 분들은 제가 뭘 하려고 하는지
이 코드를 통해서 단번에 이해하셨으리라 생각합니다.

그리고 제가 뭘 잘못했고
뭘 착각하고 있는것인지도 잘 아시리라 생각합니다.

조언 부탁드립니다.

    CommentAdd your comment...

    1 answer

    1.  
      1
      0
      -1

      자답


      1.composer 프로젝트 생성
        > :
          원하는 이름의 디렉토리를 만들고 그 안에서 다음과 같은 명령어를 입력한다.
        <shell>
          composer init
        </shell>
        > :
          composer.json 파일이 생성된것을 확인한다.$_COOKIE

      2.디렉토리 구조 만들기
        > :
          autoload에 관리될 디렉토리및 파일을 만든다.

        <shell>
          mkdir app app/Event && touch app/Event/TestEvent.php
        </shell>

        2.1. TestEvent.php 파일 작성
          > :
            <code fileName="app/Event/TestEvent.php">
              <?php
                namespace App\Event;

                class TestEvent {
                  public $value = 10;
                  public function getValue() {
                    return $this->value;
                  }
                }
              ?> <!-- 여기는 없어도 된다. -->
            </code>

      3.composer.json에서 autoload 사항 추가하기
        > :
          app/Event/TestEvent.php 파일을 오토로드하기 위해

          "autoload": {
            "psr-4": {
              "App\\": "app/"
            }
          },

          위의 내용을 composer.json 파일에 추가한다.
          
        <code fileName="composer.json">
          {
              "name": "hgshome/hgshome",
              "autoload": {
                "psr-4": {
                  "App\\": "app/"
                }
              },
              "authors": [
                  {
                      "name": "hgs",
                      "email": "hgs@hgshome.home"
                  }
              ],
              "require": {}
          }
        </code>
        > :
          App이라는 이름으로 app 디렉토리 하위의 모든 디렉토리와 파일을
          불러올 수 있게 한다.
          

      4.autoload 등록하기
        > :
          composer.json의 autoload 등록 규칙에 따라서
          composer가 app 디렉토리 하위에 존재하는
          namespace가 App으로 시작되는 php 파일들을 순회하면서
          vendor/composer 디렉토리 하위에 있는
          autoload_* 파일 각자에 해당 되는 정보를 기록한다.
        <shell>
          composer dump-autoload -o
        </shell>

          > :
            dump-autoload 뒤에 따라오는 -o를 입력하지 않으면
            vendor/composer/autoload_classmap.php 파일에
            app 디렉토리 하위에 있는 php 파일의 class들이 등록되지 않는다.
            이렇게 되면 autoload는 하나마나가 되는것이다.

      5.사용하기
        > :
          composer의 autoload를 통해서 등록된 php 파일을 어떻게
          사용되는지에 대해서 설명한다.

        <shell
         cd /컴포저 프로젝트 최상위로 이동
          vi index.php
        </shell>

        <code fileName="index.php">
          <?php
            require './vendor/autoload.php';

            use App\Event\TestEvent;


            $useTest = new TestEvent();
            echo $useTest->getValue();

            echo "<br />";

            $dirTest = new App\Event\TestEvent();
            echo $dirTest->getValue();


            echo "<br />";

            $arr = [
              App\Event\TestEvent::class
            ];
            $arrTest = new $arr[0];
            echo $arrTest->getValue();
          ?>
        </code>
          > :
            require './vendor/autoload.php';를 꼭 해야하만 한다.
            그리고 사용할 수 있는 방법은 더 다양하겠지만,
            일단은 이렇게만 알아봤다.
        CommentAdd your comment...