您好,我正在尝试在Laravel 5.2中为控制器做单继承。
这是我的父基控制器类
<?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');
}
}
在BaseController类构造将获取存储在会话中的城市名称。现在我想访问这个城市名称存储在$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;
}
}
默认情况下,我猜父类变量可以访问子类,但这是不工作的,我得到错误消息,$selectedcity没有找到。
您的$selectedcity
是一个局部变量。它只存在于构造函数的函数作用域中。它将在构造函数被调用后消失。你需要把它赋值给一个实例变量,例如
class BaseController extends Controller
{
protected $selectedCity;
public function __construct($request)
{
$this->selectedCity = $request->session()->get('selectedcity');
…
然而,这将使任何从BaseController
派生的子类都可以访问。如果这是您想要的,请按所示操作。但是从您展示的代码来看,BaseController
看起来是多余的。只需删除BaseController
并将构造函数移动到HomeController
:
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;
…
如果你不清楚这些主题,一定要阅读PHP手册中的对象继承章节。