Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Доброго времени суток. Использую Laravel 5.8.17, Apache 2.4, Windows7, MS SQL 2012. Хочу передать переменную из одного public метода в другой:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class TestController extends Controller
{
private $x;
public function index()
{
$this->x ='111';
echo '$this->x= '. $this->x;
}
public function message()
{
echo '$this->x= '. $this->x;
}
}
когда вызываю метод index - выводит $this->x=111, когда вызываю метод message - выводит $this->x= и не видит значение из метода index. Все clear команды и composer dump-autoload выполнял.
Наверняка кто-то пытался такое или подобное делать. В оригинале пытаюсь передать из одного метода в другой результат запроса, так что в сессию его не хочу класть да и в Cache тоже...
Спасибо.
Не в сети
Чтобы при вызове message() в $x было значение '111' нужно дополнительно вызывать $this->index(),
либо размещать присвоение значения переменной в методе __construct().
Не в сети
DemiurgeБлагодарю за ответ.
Вот так работает, как мне надо:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class TestController extends Controller
{
private $x;
public function index()
{
$this->x ='111';
}
public function message()
{ $this->index();
echo '$this->x= '. $this->x;
}
}
На самом деле у меня в методе index формируется коллекция eloquent - результат поиска, и по нажатию кнопки выводится вьюшка с результатами поиска, а в метод message я пытаюсь передать из метода index эту самую коллекцию, чтобы потом при нажатии кнопки "Экспорт" на вьюшке с результатами происходил экспорт в Excel, как то так:
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Post;
use App\Exports\SearchExport;
use Maatwebsite\Excel\Facades\Excel;
class TestController extends Controller
{
private $x;
public function index(Request $ request)
{
$result= Post::where('title',$request->get('title'))->get();//для примера
$this->x=$result;
return view('search.result',['$res'=>$result]);
}
public function message()//сюда хочу передать коллекцию чтобы 2 раза не считать поисковый запрос
{
return Excel::download(new SearchExport($this->x), 'export.xlsx');
}
}
Ведь если я сделаю так:
class TestController extends Controller
{
private $x;
public function search(Request $ request)
{
$result= Post::where('title',$request->get('title'))->get();//для примера
$this->x=$result;
return $this->x;
}
public function index (Request $request)//выводит результат во вьюшку при нажатии кнопки поиск на форме поиска
{
$this->search($request);
$r=$this->x;
return view ('search.result','r'=>$r);
}
public function message($request)//метод вызывается при нажатии на кнопку экспорт на странице, на которой уже посчитан и отображён
//результат поиска
{ $this->search($request);//а тут я ещё раз всё ищу в БД
$r=$this->x;
return Excel::download(new SearchExport($r, 'export.xlsx');
}
}
как тут выкрутиться красиво?
PS когда я вызываю $this->search($request) в методе message, Request будет другой, и как следствие, в excel отобразится совсем не то,что во вьюшке..печаль
Изменено Landser (15.05.2019 19:39:33)
Не в сети
С потерей реквеста между методами справился так:
class TestController extends Controller
{
private $x;
public function search(Request $ request)
{
$result= Post::where('title',$request->get('title'))->get();//для примера
$this->x=$result;
return $this->x;
}
public function index (Request $request)
{
$this->search($request);
$r=$this->x;
$request->flash();//кладу в сессию
return view ('search.result','r'=>$r);
}
public function message($request)
{
$request->request->add($request->old()); //реквест пустой, но я в него из сессии кладу "старый" реквест
$this->search($request);
$r=$this->x;
return Excel::download(new SearchExport($r, 'export.xlsx');
}
}
всё как мне надо, но запроса по прежнему два одинаковых...
Не в сети
Может лучше кэшировать не запрос, а результат поиска?
Не в сети