【问题标题】:Single Inheritance of Controller Classes in Laravel 5.2Laravel 5.2 中控制器类的单一继承
【发布时间】:2016-09-30 09:07:33
【问题描述】:

您好,我正在尝试在 Laravel 5.2 中为控制器进行单继承。

这是我的父 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');

     }
 }

在 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 未找到的错误消息。

请帮助我在 chlid 类中访问此变量。

【问题讨论】:

    标签: php inheritance laravel-5 controller laravel-5.2


    【解决方案1】:

    您的$selectedcitylocal variable。它只存在于构造函数的函数范围内。调用构造函数后它将消失。您需要将其分配给 instance variable,例如

    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;
        …
    

    如果您不清楚这些主题,请务必阅读chapter on Object Inheritance in the PHP Manual

    【讨论】:

    • 我做了和你说的一样的事情,仍然显示未定义变量:selectedcity,我有 4-5 个控制器,我在其中编写了代码来检查会话是否获得了值,所以我是试图创建父类,我想在其中编写代码来检查会话值是否设置所以我创建了 BaseController 。
    • @dollar 如果您仍然收到此错误,则说明您做错了。您可能在某处遗漏了$this。或者您没有创建实例属性。无论如何,这是继承 101。将此示例视为概念证明:codepad.org/Fm9Qu54h
    • gr8 感谢它的工作,同样的方式我可以在基类中编写函数并在 chlid 类中访问它们...?
    • @dollar 是的,就像我说的:如果您不清楚这些主题,请务必阅读 PHP 手册中关于对象继承的章节。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 2013-02-20
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    • 2013-03-01
    • 2016-04-11
    相关资源
    最近更新 更多