Codeigniter. Ошибка: ArgumentCountError

0

Здравствуйте! Делаю домашнее 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');
}

Подскажите пожалуйста ошибку.

Codeigniter

3 ответов

1

У вас есть метод

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

Исходный код попробуйте скачать, чтобы сравнить с вашим кодом.

1

Вы писали это в начале вопроса:

До этого момента не находилась страница, сейчас несвязанное исключение:

Значит ошибка An uncaught Exception was encountered исправлена, нужно пофиксить 404 ошибку. 

Я сначала делал так:

1. Создавал метод в контроллере для отображения страницы (базовый функционал по подключении view, header и footer)

2. Создавал view для этой страницы (с каким нибудь текстом, типа test view)

3. Прописывал роутинг для этой страницы

И если страница работает (и отображает test view) двигался дальше.

1

Попробовал обратиться 

$this->data['table'] = $this->films_model->getFilmsRating(false, 8, 1);

теперь выходит 404 ошибка

Sign up or Log in to write an answer