Codeigniter: где поместить переменную из URL - PullRequest
1 голос
/ 23 февраля 2012

Я занимаюсь разработкой сайта статистики в Codeigniter на местном уровне. У меня есть URL, как localhost / sitename / player / show_profile / PlayerName

В настоящее время у меня есть следующее:

<?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. У меня $player_name = $this->uri->segment(3); в __construct, так что он доступен для всех методов класса. Это то, как я должен это делать?

Это безопасно?

Ответы [ 2 ]

4 голосов
/ 23 февраля 2012

Прежде всего, нет смысла присваивать переменную в конструкторе, потому что она будет перезаписана. Когда вы передаете CI URL-адрес, такой как localhost / sitename / player / show_profile / PlayerName, все, что передано методу get (т.е. 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);
}
1 голос
/ 23 февраля 2012

Что вы можете сделать, это определить переменную класса $ player_name и в конструкторе установить ее в сегмент (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.

Peter

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...