라라벨에서 네임스페이스를 이용해 기존 클래스들을 사용하기

출처 : 임시 깃허브 위키

php, 라라벨 초보라 맞지 않는 부분이 있을 수 있습니다. 지적질 환영합니다. :)

공부할 부분

```
<?php namespace Controllers\Admin;

use AdminController;
use Input;
use Lang;
use Post;
use Redirect;
use Sentry;
use Str;
use Validator;
use View;
```

관련지식 모음

1. 네임스페이스란?

네임스페이스란 디렉토리다. 공구박스라고 볼 수 도있다. 망치라는 이름의 클래스가 차량용, 집수리용이라는 네임스페이스 공구박스에 각각 들어갈 수 있다. 라라벨이 아닌 php 개념입니다.

2. 라라벨에서 네임스페이스 사용하기(스택오버플로우)

app/models/File.php

namespace App\Models;
class File {

public function someMethodThatGetsFiles()
{

}
}

app/controllers/FileController.php

namespace App\Controllers;

use App\Models\File;

class FileController {

    public function someMethod()
    {

        $file = new File();
    }
}

네임스페이스 정의:

 namespace App\Controllers;

기억할 것은... php 내장 클래스로 접근하기 위한 클래스를 네임스페이스에 한 번 넣었으면. 반드시 루트 네임스페이스로부터 호출해야 한다. 예: $stdClass = new stdClass(); 는 다음처럼 써야한다. $stdClass = new \stdClass(); (\ 를 봐라.)

다른 네임스페이스 가져오기:

 use App\Models\File;

요렇게 하면 네임스페이스 접두사 없이도 File 클래스를 사용할 수 있게 된다.

다른 방법으로는 다음처럼 직접 호출할 수도 있다:

 $file = new App\Models\File();

하지만 좋은 방법은 제일 위에 선언해줘서.. 코드를 흟어보지 않아도 의존성을 확인할 수 있게 해주는 것이다.

네임스페이스 정의 다 했으면 composer dump-autoload 를 실행시켜서 Composer's autoload 함수가 니가 새로만튼 클래스를 너의 계정으로 가져오도록 해줘야한다. composer dump-autoload 는 클래스를 재구축해서 새로만든 클래스 파일들이 작동할 수 있게 해준다.

명심할 것은 FileController 를 URL 을 통해서 접근하려고 한다면 특정 네임스페이스를 향하는 라우트를 정의해줘야만 한다:

Route::get('file', 'App\\Controllers\\FileController@someMethod');
모든 GET /file 요청을 FileController 에 someMethod()로 연결시켜준다.

3. 컴포저로 라라벨 번들을 등록할 경우 어떻게 네임스페스를 등록하는지...

컴포저로 라라벨 번들이나 패키지 설치시 다음처럼 autoload 부분이 있어서 자동갱신이... 가능하다. 추가하면 말이다.

"autoload": {
    "classmap": [
        "app/commands",
        "app/controllers",
        "app/models",
        "app/database/migrations",
        "app/database/seeds",
        "app/tests/TestCase.php"
    ]

아니면 app/config/app.php 파일에 서비스공급자에 해당 패키지프로바이더 경로를 써준 후 밑에 별명(aliases)에 네임스페이스를 추가하면 나중에 컨트롤러에서 편리하게 불러올 수 있다.

'aliases' => array(

    'App'             => 'Illuminate\Support\Facades\App',


),

요렇게 돼있으면

use App

이라고만 하면 use Illuminate\Support\Facades\App 한 것과 같은 효과가 난다.

4. 네임스페이스로 불러온 클래스와 클래스의 메서드를 사용하는 방법

위에서 'use APP' 해서 불러온 클래스는.. 'APP::메서드이름' 형태로 사용할 수 있다.

comments powered by Disqus