2016-09-30 2 views
1

Hallo, ich versuche, einzelne Vererbung in Laravel 5.2 für Controller zu tun.Einfache Vererbung von Controller-Klassen in Laravel 5.2

Dies ist meine Mutterbase Klasse

<?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'); 

    } 
} 

In Base Klasse Konstrukt wird den Namen der Stadt in der Sitzung gespeichert holen. Nun möchte ich auf diesen in $ selectedcity gespeicherten Stadtnamen in meiner Kindklasse zugreifen.

Mein Kind Controller-Klasse ist

<?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 denke, ich Eltern Klassenvariablen Klasse verfügbar sind, aber das funktioniert nicht und ich erhalte Fehlermeldung, die $ selectedcity nicht gefunden.

Bitte helfen Sie mir Zugriff auf diese Variable in der Klasse Chlid.

Antwort

1

Ihre $selectedcity ist eine local variable. Es existiert nur im Funktionsumfang des Konstruktors. Es wird weg sein, nachdem der Konstruktor aufgerufen wurde. Sie müssen es stattdessen einer instance variable zuweisen, z.

class BaseController extends Controller 
{ 
    protected $selectedCity; 

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

jedoch, das wäre es zugänglich jede Unterklasse von der BaseController abgeleitet werden. Wenn es das ist, was Sie wollen, tun Sie es wie gezeigt.

Aber aus dem Code, den Sie zeigen, scheint die BaseController überflüssig zu haben. Nur die BaseController entfernen und den Konstruktor der HomeController bewegen:

class HomeController extends Controller 
{ 
    private $selectedCity; 

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

die Instanz-Variable zugreifen zu können, müssen Sie es über $this holen, z.B.

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

Achten Sie auf die chapter on Object Inheritance in the PHP Manual, wenn diese Themen Sie sind unklar zu lesen.

+0

Ich habe die gleiche Sache wie Sie sagten immer noch zeigt es mir Undefined Variable: selectedcity, und ich habe 4-5 Controller, wo ich Code geschrieben habe, um zu überprüfen, ob Sitzung hat den Wert oder nicht, also habe ich versucht, Elternklasse zu erstellen in dem ich den Code schreiben möchte, um den Sitzungswert zu überprüfen, ist gesetzt oder nicht, also habe ich BaseController erstellt. – dollar

+0

@dollar Wenn Sie diesen Fehler immer noch erhalten, haben Sie etwas falsch gemacht. Vermutlich vermisst du irgendwo ein '$ this'. Oder Sie haben keine Instanzeigenschaft erstellt. In jedem Fall, das ist Vererbung 101. Siehe dieses Beispiel als Beweis des Konzepts: http://codepad.org/Fm9Qu54h – Gordon

+0

gr8 danke es funktionierte, genauso kann ich Funktionen in der Basisklasse schreiben und auf sie in der Klasse chlid zugreifen .. .? – dollar