我有以下问题。我希望我的方法不是完全错误的,请随时咨询。
我有一个Model类Chat.php
protected $skip;
protected $take;
protected $agreements;
protected $chat;
public function getSkip()
{
return $this->skip;
}
public function setSkip($skip)
{
$this->skip = $skip;
}
public function getTake()
{
return $this->take;
}
public function setTake($take)
{
$this->take = $take;
}
public function __construct(array $attributes = array())
{
parent::__construct($attributes);
$this->setTake(8);
$this->setSkip(8);
}
我在此处设置属性skip
和take
。
然后,我有DashboardController
class DashboardController extends Controller
{
private $chat;
/**
* DashboardController constructor.
* @param $chat
*/
public function __construct(Chat $chat)
{
$this->chat = $chat;
}
/**
* Display a listing of the authenticated resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$chats = Chat::orderBy('created_at','desc')->skip($this->chat->getSkip())->take($this->chat->getTake())->get();
$agreements = AgrType::orderBy('created_at','desc')->take(10)->get();
return view('sections.dashboard', compact('chats','agreements'));
}
public function loadMore()
{
$this->chat->setSkip($this->chat->getSkip() - 1 );
$this->chat->setTake($this->chat->getTake() - 1);
return redirect('/dashboard');
}
我的方法如下:
用户单击按钮后,路由/loadmore
将他带到该控制器并触发loadMore
功能。
LoadMore
函数然后通过访问器获取值,并使用mutator设置值。
Index方法然后简单地读取此值。
所以意思是:我显示了聊天窗口(也许是注释窗口导致此对话不是真正的聊天),调用了index方法。
Index方法读取值并根据查询显示注释。 ->这个可以了
现在,什么不起作用:
当我单击按钮时,将调用loadMore函数,设置索引方法然后根据它们读取并重新加载的值。
我尝试了什么:我尝试用loadMore方法显示自己的值(已更改)并返回它们,但是随后我有了一条重新加载聊天的新路线,这不是我想要的。
我想念什么?我的方法可以吗? (我知道javascript可能对此更好,但是我想用Laravel的方式来获取和发布。)
谢谢。
答案 0 :(得分:2)
您的控制器功能在完全独立的请求中执行。
return redirect('/dashboard');
在loadMore()
中所做的所有操作都会将您的浏览器发送到仪表板路线。然后,您的浏览器向index()
发出新请求,并在该请求上再次实例化控制器,再次运行其__construct()
函数,并实例化一个新的空Chat
模型。
我建议您将take和skip参数放入网址中,如下所示:
$router->get('/dashboard/{skip}/{take}', 'DashboardController@index');
然后将您的index()
函数更改为此:
public function index($skip, $take)
这样可以正常工作,但是更好的方法是使用Laravel的paginate()
函数:https://laravel.com/docs/5.6/pagination
public function index()
{
$chats = Chat::orderBy('created_at','desc')->paginate();
$agreements = AgrType::orderBy('created_at','desc')->take(10)->get();
return view('sections.dashboard', compact('chats','agreements'));
}