Это моя первая php-структура. У меня есть php-файл в моем контроллере, который является post.php, но когда я попытался запустить его localhost / codeigniter / index.php / posts, он отображает ошибку 404
.htaccess внутри папки приложения
<IfModule authz_core_module> Require all denied </IfModule> <IfModule !authz_core_module> Deny from all </IfModule>
autoload.php
$autoload['libraries'] = array('database'); $autoload['helper'] = array('url');
config.php
$config['base_url'] = 'http://localhost/codeigniter/'; $config['index_page'] = 'index.php';
routes.php
$route['default_controller'] = 'welcome'; $route['404_override'] = ''; $route['translate_uri_dashes'] = FALSE;
post.php в папке модели
class Post extends CI_Model{ function get_posts($num = 20, $start = 0){ //$sql = "SELECT * FROM users WHERE active=1 ORDER BY date_added DESC LIMIT 0,20;"; $this->db->select()->from('posts')->where('active', 1)->order_by('date_added', 'desc')->limit(0, 20); $query=$this->db->get(); return $query->result_array(); } }
posts.php в папке контроллера
class Posts extends CI_Controller{ function index(){ $this->load->model('post'); $data['posts'] = $this->post->get_posts(); echo "<pre>"; print_r($data['posts']); echo "</pre>"; } }
Он должен отображать пустой массив, но вместо этого он показывает ошибку 404
При использовании codeigniter 3
Все контроллеры и модели должны иметь первую букву имени класса и имени файла в качестве примера верхнего примера Welcome.php и не welcome.php
Для вашей модели, потому что это то же имя, что и контроллер. Я бы сменил название модели на Model_post
Имя файла: Model_post.php
<?php class Model_post extends CI_Model { public function some_function() { } }
Таким образом, не будет запутанным.
Post Controller будет
Имя файла: Post.php
<?php class Post extends CI_Controller { public function __construct() { parent::__construct(); $this->load->model('model_post'); } public function index() { $this->model_post->some_function(); } }
Также в вашем URL-адресе, если не настроен codeigniter / htaccess для удаления index.php, тогда ваш URL-адрес должен будет использовать index.php каждый раз.
http://localhost/project/index.php/post http://www.example.com/index.php/post
Примечание. Не касайтесь htaccess в папке приложения, если вам нужно htaccess добавить один в основной каталог Htaccess For Codeigniter
Предыдущие версии codeigniter перед v3 вам не нужно было беспокоиться о ucfirst для контроллеров, но теперь вы делаете для версии 3 и выше.
Добавьте маршрут, как …
$route['posts'] = 'posts/index';
В моем случае это решило вопрос:
Перейдите в config / routes.php и определите контроллер по умолчанию в строке 52;
Если вам нужна другая функция вместо индекса, я бы назвал эту функцию функцией индекса. Но это на вас.