Codeigniter. Ошибка: ArgumentCountError
Здравствуйте! Делаю домашнее Codeigniter урока 19. До этого момента не находилась страница, сейчас несвязанное исключение:
An uncaught Exception was encountered
Type: ArgumentCountError
Message: Too few arguments to function Films_model::getFilmsRating(), 1 passed in C:\xampp\htdocs\kinomonster\application\core\MY_Controller.php on line 15 and at least 2 expected
Filename: C:\xampp\htdocs\kinomonster\application\models\Films_model.php
Line Number: 45
Backtrace:
File: C:\xampp\htdocs\kinomonster\application\core\MY_Controller.php
Line: 15
Function: getFilmsRating
File: C:\xampp\htdocs\kinomonster\application\controllers\Movies.php
Line: 7
Function: __construct
File: C:\xampp\htdocs\kinomonster\index.php
Line: 315
Function: require_once
Код такой:
1. В routes.php
$route['movies/table/rating'] = 'movies/table/rating/$1';
2. В Main.php
public function table() {
$this->data['title'] = "Рейтинг фильмов";
$this->load->model('films_model');
$this->data['table'] = $this->films_model->getFilmsRating(false, 8, 1);
$this->load->view('templates/header', $this->data);
$this->load->view('main/table', $this->data);
$this->load->view('templates/footer');
}
3. B Films_model.php
public function getFilmsRating($slug = FALSE, $limit, $type = 1) {
if($slug === FALSE) {
$queri = $this->db
->where('category_id', $table)
->order_by('add_date', 'desc')
->limit($limit)
->get('movie');
return $queri->result_array();
}
$queri = $this->db->get_where('movie', array('slug'=>$slug));
return $queri->result_array();
}
4. B MY_Controller.php
class MY_Controller extends CI_Controller {
public function __construct() {
parent::__construct();
$this->data['title'] = "КиноМонстр - сайт о кино";
$this->load->model('news_model');
$this->data['news'] = $this->news_model->getNews();
$this->load->model('films_model');
$this->data['films'] = $this->films_model->getFilmsByRating(10);
$this->data['table'] = $this->films_model->getFilmsRating(8);
}
5. B table.php
<h1><?php echo $title; ?></h1>
<hr>
<?php echo $pagination; ?>
<table class="table table-striped">
<thead>
<tr>
<th></th>
<th>Фильм</th>
<th class="text-center">Год</th>
<th class="text-center">Рейтинг</th>
</tr>
</thead>
<tbody>
<?php foreach ($movie_data as $key=>$value): ?>
<tr>
<td class="col-lg-1 col-md-1 col-xs-2">
<img class="img-responsive img-thumbnail" src="<?php echo $value['poster']; ?>" alt="<?php echo $value['name']; ?>">
</td>
<td class="vert-align"><a href="/movies/view/<?php echo $value['slug']; ?>/"><?php echo $value['name']; ?></a></td>
<td class="text-center vert-align"><?php echo $value['year']; ?></td>
<td class="text-center vert-align"><span class="badge"><?php echo $value['rating']; ?></span></td>
</tr>
<?php endforeach;?>
</tbody>
</table>
6. B Movies.php
public function table($slug = NULL) {
$this->load->library('pagination');
$this->data['movie_data'] = null;
$offset = (int) $this->uri->segment(4);
$row_count = 8;
$count = 0;
if($slug == "rating") {
$count = count($this->films_model->getFilmsRating(0, 1));
$p_config['base_url'] = '/movies/table/rating/';
$this->data['title'] = "Рейтинг фильмов";
$this->data['movie_data'] = $this->films_model->getMoviesOnPage($row_count, $offset, 1);
}
//Pagination config
$p_config['total_rows'] = $count;
$p_config['per_page'] = $row_count;
$p_config['full_tag_open'] = "<ul class='pagination'>";
$p_config['full_tag_close'] ="</ul>";
$p_config['num_tag_open'] = '<li>';
$p_config['num_tag_close'] = '</li>';
$p_config['cur_tag_open'] = "<li class='disabled'><li class='active'><a href='#'>";
$p_config['cur_tag_close'] = "<span class='sr-only'></span></a></li>";
$p_config['next_tag_open'] = "<li>";
$p_config['next_tagl_close'] = "</li>";
$p_config['prev_tag_open'] = "<li>";
$p_config['prev_tagl_close'] = "</li>";
$p_config['first_tag_open'] = "<li>";
$p_config['first_tagl_close'] = "</li>";
$p_config['last_tag_open'] = "<li>";
$p_config['last_tagl_close'] = "</li>";
//init pagination
$this->pagination->initialize($p_config);
$this->data['pagination'] = $this->pagination->create_links();
$this->load->view('templates/header', $this->data);
$this->load->view('movies/rating', $this->data);
$this->load->view('templates/footer');
}
Подскажите пожалуйста ошибку.
3 ответов
У вас есть метод
public function getFilmsRating($slug = FALSE, $limit, $type = 1) {
if($slug === FALSE) {
$queri = $this->db
->where('category_id', $table)
->order_by('add_date', 'desc')
->limit($limit)
->get('movie');
return $queri->result_array();
}
В нем 3 аргумента
В My_controller вы вызываете этот метод с одним аргументом:
$this->data['table'] = $this->films_model->getFilmsRating(8);
По этому у вас ошибка связанная с недостатком аргументов:
An uncaught Exception was encountered
Type: ArgumentCountError
Message: Too few arguments to function Films_model::getFilmsRating(), 1 passed in C:\xampp\htdocs\kinomonster\application\core\MY_Controller.php on line 15 and at least 2 expected
Filename: C:\xampp\htdocs\kinomonster\application\models\Films_model.php
Исходный код попробуйте скачать, чтобы сравнить с вашим кодом.
Вы писали это в начале вопроса:
До этого момента не находилась страница, сейчас несвязанное исключение:
Значит ошибка An uncaught Exception was encountered исправлена, нужно пофиксить 404 ошибку.
Я сначала делал так:
1. Создавал метод в контроллере для отображения страницы (базовый функционал по подключении view, header и footer)
2. Создавал view для этой страницы (с каким нибудь текстом, типа test view)
3. Прописывал роутинг для этой страницы
И если страница работает (и отображает test view) двигался дальше.
Попробовал обратиться
$this->data['table'] = $this->films_model->getFilmsRating(false, 8, 1);
теперь выходит 404 ошибка