cakePHP:结合2个动作并加载所有玩家以及一个改变的玩家

时间:2014-08-27 15:00:46

标签: php cakephp view controller action

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

现在我想只有一个带有播放器图像旋转木马的索引屏幕,点击图像后我想在同一个索引屏幕上显示该播放器的信息。

我如何最好地组合索引和视图,以便我可以点击播放器图像并在同一页面上检索他的信息?目标是在控制器中有一个视图文件和一个操作。那么我怎样才能在一个动作中找到(' all')并找到(' first')?

现在我有/球员和/球员/观看/ 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.网址改变为玩家/ index / {点击播放器的数量}

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));
}

第二种情况

这并没有向我显示播放器图片,但是当我更改网址时,它会向我提供我在网址中提供的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));
}

如果我去/球员或球员/指数我不会得到任何价值。

我如何结合这两个?

1 个答案:

答案 0 :(得分:0)

您是否尝试过ajax和路由来实现内容刷新(基本上是创建自己的内部资源api调用)?我将cakephp用于我自己的项目,需要一种绕过整个控制器的方法,查看加载机制以获得更快的UI体验。

要点是在模板或布局文件中包含jquery。当调用某个路由或URL时(这需要在app / config中的routes.php文件中相对于您的apps根文件夹设置路由),触发ajax调用以获取内容并动态更新dom而不必重新加载页面。

这个建议可能会为你开辟一整套新的蠕虫,但我认为这是可以实现的。