cakeHP:组合2个动作,加载所有玩家和一个改变的玩家


cakePHP : combining 2 actions and loading all players and also one player that changes

在我的索引(/players)视图中,我有一个旋转木马,上面有一群玩家的图像。当我点击图像时,我会转到被点击的播放器的视图屏幕(/players/view/1)。

现在我只想有一个带有玩家图像转盘的索引屏幕,在我点击图像后,我想在同一索引屏幕上显示该玩家的信息。

我该如何最好地组合索引和视图,以便我可以点击球员图像并在同一页面上检索他的信息?目标是在控制器中有一个视图文件和一个操作。那么,我如何将find("all")和find(‘first’)放在一个动作中呢?

现在我有/players和/players/view/1。我想要例如/players/1,这样它就可以加载在同一个页面上。然而,我认为这仍然会给页面加载。

最终,我不想加载页面,只想更改内容。

PlayersController的索引操作(给我所有玩家):

public function index() {
    $this->layout = 'default_front_players';
    $this->Player->recursive = 0;
    //$this->Player->find('all');
    $this->set('players', $this->Paginator->paginate());
}

查看PlayersController的操作(给我已点击的播放器):

public function view($id = null) {
    $this->layout = 'default_front_players';
    if (!$this->Player->exists($id)) {
        throw new NotFoundException(__('Invalid player'));
    }
    $options = array('conditions' => array('Player.' . $this->Player->primaryKey => $id));
    $this->set('player', $this->Player->find('first', $options));
}

更新

第一种情况

这给了我所有的玩家,也给了我一个玩家(atm玩家143,数据库中的最后一个),问题是当我点击玩家图像时,玩家会停留在玩家143上。url更改为播放器/索引/{点击的播放器数量}

public function index($id = null) {
    $this->layout = 'default_front_players';
    $this->Player->recursive = 0;
    $players = $this->Player->find('all');
    $this->set(compact('players'));
    $options = array('conditions' => array('Player.' . $this->Player->primaryKey => $id));
    $player = $this->set('player', $this->Player->find('first', $options));
}

第二种情况

这不会向我显示玩家的图像,但当我更改url时,它会向我提供我在url中提供的玩家id的内容。

public function index($id = null) {
    $this->layout = 'default_front_players';
    $this->Player->recursive = 0;
    //$players = $this->Player->find('all');
    //$this->Paginator->settings = $this->paginator_players;
    $this->set('players');
    $options = array('conditions' => array('Player.' . $this->Player->primaryKey => $id));
    $player = $this->set('player', $this->Player->find('first', $options));
}

如果我转到/players或players/index,我不会得到任何值。

我如何将这两个组合起来?

您是否尝试过ajax和路由来实现内容刷新(本质上是创建对内部资源的自己的api调用)?我在自己的副项目中使用了cakepp,并且需要一种绕过整个控制器、视图加载机制的方法来获得更快的UI体验。

要点是在模板或布局文件中包含jquery。当调用某个路由或url时(这需要在app/config中的routes.php文件中设置一个路由,而不是从应用程序根文件夹设置),启动ajax调用以获取内容并动态更新dom,而无需重新加载页面。

这个建议可能会给你带来一个全新的麻烦,但我认为它是可以实现的。