2016-09-30 4 views
1

안녕하세요, 저는 컨트롤러 용 Laravel 5.2에서 단일 상속을 시도하고 있습니다.Laravel에서 컨트롤러 클래스의 단일 상속 5.2

이 세션에 저장되어있는 도시 이름을 가져옵니다 BaseController 클래스 구조에서 내 부모 basecontroller 클래스

<?php 

namespace App\Http\Controllers\Moviesfrontend; 

use Illuminate\Http\Request; 

use App\Http\Requests; 
use App\Http\Controllers\Controller; 


class BaseController extends Controller 
{ 
    public function __construct($request) 
    { 
     //code to check whether city is set in session or not 
     $selectedcity=$request->session()->get('selectedcity'); 

    } 
} 

입니다. 이제 자녀 클래스의 $ selectedcity에 저장된이 도시 이름에 액세스하려고합니다.

내 자식 컨트롤러 클래스는

<?php 

    namespace App\Http\Controllers\Moviesfrontend; 

    use Illuminate\Http\Request; 

    use App\Http\Requests; 
    use App\Http\Controllers\Controller; 

    class HomeController extends BaseController 
    { 

     public function __construct(Request $request) 
     { 

      parent::__construct($request); 

     } 

     public function index(Request $request) 
     { 
      echo $selectedcity; 
     } 
    } 

가 Bedefault 내가 부모 클래스의 변수는 자식 클래스에 액세스 할 수 있습니다하지만이 작동하지 않습니다와 나는 $ selectedcity 찾을 수 없습니다 오류 메시지가 무엇입니까 추측이다.

chlid 클래스에서이 변수에 액세스하는 것이 도움이되도록하겠습니다.

답변

1

$selectedcitylocal variable입니다. 생성자의 함수 범위에만 존재합니다. 생성자가 호출 된 후에 사라집니다. 대신 instance variable에 할당해야합니다.

class BaseController extends Controller 
{ 
    protected $selectedCity; 

    public function __construct($request) 
    { 
     $this->selectedCity = $request->session()->get('selectedcity'); 
     … 

그러나,이 BaseController에서 파생 된 그 접근에 어떤 서브 클래스를 만들 것입니다. 그것이 당신이 원하는 것이라면, 그림과 같이하십시오.

하지만 코드에서 볼 수 있듯이 BaseController은 불필요한 것으로 보입니다. 그냥 HomeController에 생성자를 BaseController을 제거하고 이동 :

class HomeController extends Controller 
{ 
    private $selectedCity; 

    public function __construct($request) 
    { 
     $this->selectedCity = $request->session()->get('selectedcity'); 
     … 

는 인스턴스 변수에 액세스하려면, 예를 들어 $this 통해 그것을 가져가

public function index(Request $request) 
{ 
    echo $this->selectedCity; 
    … 

것은 이러한 주제는 당신에게 불분명 한 경우 chapter on Object Inheritance in the PHP Manual를 읽을 수 있는지 확인합니다.

+0

나도 똑같은 말을했다. 아직 정의되지 않은 변수 : selectedcity가있다. 그리고 나는 부모 클래스를 만들려고했기 때문에 세션에 값이 있는지 여부를 확인하는 코드를 작성했다. 내가 어떤 코드를 작성하여 세션 값이 설정되었는지 확인하고 싶습니다. 그래서 BaseController를 만들었습니다. – dollar

+0

@dollar이 오류가 계속 발생하면 잘못된 결과가 발생합니다. 어딘가에'$ this'가 빠졌을 것입니다. 또는 인스턴스 속성을 만들지 않았습니다. 어쨌든 이것은 상속 101입니다. 개념의 증명으로이 예제를보십시오 : http://codepad.org/Fm9Qu54h – Gordon

+0

gr8 덕분에, 같은 방법으로 기본 클래스에서 함수를 작성하고 클래스에 액세스 할 수 있습니다. .? – dollar

관련 문제