我有以下问题。我希望我的方法并非完全错误,随时提出建议。
我有一个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设置值。
索引方法然后只是读取此值。
所以意思是:我显示聊天窗口(可能是评论窗口导致这个不是真正的聊天),索引方法被调用。
索引方法根据查询读取值并显示注释。 - >这个还可以
现在,什么不起作用:
当我单击按钮时,调用loadMore函数,设置索引方法然后根据它们读取和重新加载的值。
我尝试了什么:我尝试使用loadMore方法来显示自己的值(已更改)并返回它们,但是我有一条重新加载聊天的新路由,这不是我想要的。
我错过了什么?我的方法好吗? (我知道javascript可能对此更好,但我想要一个Laravel方式,获取和发布。)
提前致谢。
您的控制器功能在完全独立的请求中执行。
所有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'));
}