2012-02-23 4 views
1

저는 Codeigniter에서 통계 사이트를 로컬로 개발 중입니다.Codeigniter : URL에서 변수를 가져올 위치

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class Player extends CI_Controller 
{ 

    public function __construct() 
    { 
    parent::__construct(); 
    $this->load->model('player_model'); 
    $player_name = $this->uri->segment(3); 
    } 


    public function index() 
    { 
     echo "index"; 
    } 

    public function show_profile($player_name) 

    { 

     $data['player_stats'] = $this->player_model->get_stats($player_name); 
     $this->load->view('player/player_stats', $data); 
    } 

} 

?> 

이 작동하지만, 내 질문은 $ PLAYER_NAME 선수의 변수에 관한됩니다 : 나는 다음과 같은 로컬 호스트/사이트 이름/플레이어/show_profile/플레이어 명

나는 현재이 같은 URL을 가지고있다. __construct에 $player_name = $this->uri->segment(3);이 있으므로 모든 클래스 메서드에서 사용할 수 있습니다. 이것이 내가해야만하는 방식인가?

안전한가요?

답변

4

주먹, 덮어 얻을 것 때문에 생성자에서 변수를 할당하는 것은 아무런 도움이되지 않습니다. CI에 localhost/sitename/player/show_profile/PlayerName과 같은 URL을 전달하면 메소드 (예 : PlayerName)를 통과 한 모든 것이 get 매개 변수로 설정됩니다. 따라서 변수가

public function show_profile($player_name){ 

인 경우에는 메소드 코드를 사용할 때 이미 설정되어 있습니다.

둘째, 나는 베드로의 동의 :

protected $player_name; 

를 컨트롤러에 전역 적으로 접근 할 수 있도록합니다. 하지만 생성자에서 설정하는 것에 동의하지 않습니다. 이 컨트롤러에 다른 곳에서 변수를 전달하는 다른 방법이 있다면 거기에 잘못된 데이터를 가져올 것입니다.

public function show_profile($player_name){ 

    $this->player_name = $player_name; 

    $data['player_stats'] = $this->player_model->get_stats($player_name); 
    $this->load->view('player/player_stats', $data); 
} 
+0

'$ this-> uri-> segment (3);은 어떻게됩니까? – Motive

+0

내 게시물을 업데이트했습니다. 원래 방법 프로토 타입을 고수 할 때 필요하지 않습니다. – Birdman

+0

아, CI가 그 메소드를 통과 시켰음을 알지 못했습니다. 알아 둘만한! 도와 주셔서 감사합니다. – Motive

1

$ player_name이라는 클래스 변수를 정의하고 생성자에서 이것을 segment (3)로 설정하면됩니다.

class Player extends CI_Controller 

{

protected $player_name; 

public function __construct() { 
    parent::__construct(); 
    $this->load->model('player_model'); 
    $this->player_name = $this->uri->segment(3); 
} 

public function index() { 
    echo "index"; 
} 

public function (show_profile) { 

    $data['player_stats'] = $this->player_model->get_stats($this->player_name); 
    $this->load->view('player/player_stats', $data); 
} 

}

이 방법은 수업 시간에 어디서나 $의 play_name 변수에 액세스 할 수 있습니다.

또한 $ this-> uri-> uri_to_assoc (n) 메소드를 사용하여 설정했는지 확인하고 키/값이 isset()인지 확인하십시오. http://codeigniter.com/user_guide/ libraries/uri.html.

모두의 피터

관련 문제