【问题标题】:Laravel controller static var always nullLaravel 控制器静态变量始终为空
【发布时间】:2018-07-03 14:40:39
【问题描述】:

我试图声明一个静态变量,但总是为空,我尝试了几种组合和方法,但没有运气。我正在尝试使用一些数据存储一个 var,但我真的不想重新处理,如果已经处理过一次。

            class PackingController extends Controller
            {
                protected static $i;

                function Process(Request $request)
                {
                    $r = new packing();
                    $v = $r->customer('data','data');
                    $items = $this->startProcess($v,false);
                    return \View::make('list/print',compact('items'));

                }

                private function startProcess($dbitems, $ajust=false)
                {

                //Some logic

                self::$i = $items;
                return $items;

                }

                function printPdf()
                {

                    $items = self::$i;
                    //shows null:
                    dd($items);
                }
            }

怎么了?

更新:我尝试单例但没有运气。

        namespace App\Helper;

        class Items
        {

            private static $_items;
            private static $inst;

            public function setItems($value)
            {
                self::$_items = $value;
            }

            public function getItems()
            {
                return self::$_items;
            }


            public static function Instance()
            {
                if (self::$inst == null) {
                    self::$inst = new Items();
                }

                return self::$inst;
            }

            private function __clone()
            {
            }

            private function __construct()
            {
            }

        }

使用单例,仍然为空,也尝试使用单个值,而不是变量,没有运气

    class PackingController extends Controller
    {
        protected static $i;


        function GetPackings()
        {
            $s = sales::with('Customer')->where('salestype','=','3')->take(1000)->orderBy('receiptdaterequested','desc')->pluck('salesid','salesid');

            $p = pack::distinct('APPACKINGGROUPID')->pluck('APPACKINGGROUPID','APPACKINGGROUPID')->all();

            return \View::make('listas/index',compact('p','s'));
        }

        function Process(Request $request)
        {
            $r = new packing();
            $v = $r->customer('Mexico','PVE0111998');
            $items = $this->startProcess($v,false);
            return \View::make('listas/print',compact('items'));

        }

        private function startProcess($dbitems, $ajust=false)
        {
            $bultos = 1;

            $items = array();

            foreach ($dbitems as $dbitem)
            {
            //Some process

                $items[]=$item;
            }

            $s = Items::Instance();

            if (count($items) > 0 ) {
                $s->setItems($items);
            }

            return $items;
        }

        function printPdf()
        {
            $s = Items::Instance();
            $s->getItems();

            dd($s->getItems());
        }
    }

【问题讨论】:

  • self::$i = $items $items 是在哪里定义的还是 $dbitems?
  • $items 是$dbitems 进程的结果,是一个数组,我用singleton 尝试没有运气,我真的不明白

标签: laravel variables static


【解决方案1】:

你为什么要声明一个静态变量或 singleton 在methods 之间传递值? 也许您应该尝试在会话中保存数据:

session()->set('items',$dbtitems);

还有……

$items = session()->get('items);

【讨论】:

  • 我尝试过,但仍然为空,
  • session()->put('items',$items);会话()->保存(); $items = session()->get('items');
猜你喜欢
  • 2021-04-20
  • 1970-01-01
  • 1970-01-01
  • 2016-05-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-30
  • 1970-01-01
相关资源
最近更新 更多