Codeigniter 和 AngularJS 错误:当应用程序不在根目录中时,分页不起作用



我正在开发一个带有Codeigniter 3.1.8AngularJS v1.7.8博客应用程序

应用程序的仪表板是"纯"Codeigniter,具有模型,控制器和视图,而前面的仪表板由AngularJS管理和显示的JSON组成。(作后端和前端之间的这种明确分离,以实现"主题化"。

帖子是分页的。在后端的帖子控制器中,帖子列表如下所示:

private function _initPagination($path, $totalRows, $query_string_segment = 'page') {
//load and configure pagination 
$this->load->library('pagination');
$config['base_url'] = "http://".$_SERVER['HTTP_HOST'] . $path;
$config['query_string_segment'] = $query_string_segment; 
$config['enable_query_strings'] =TRUE;
$config['reuse_query_string'] =TRUE;
$config['total_rows'] = $totalRows;
$config['per_page'] = 12;
if (!isset($_GET[$config['query_string_segment']]) || $_GET[$config['query_string_segment']] < 1) {
$_GET[$config['query_string_segment']] = 1;
}
$this->pagination->initialize($config);
$limit = $config['per_page'];
$offset = ($this->input->get($config['query_string_segment']) - 1) * $limit;
return ['limit' => $limit, 'offset' => $offset];
}
public function index() {
//call initialization method
$config = $this->_initPagination("/", $this->Posts_model->get_num_rows());
$data = $this->Static_model->get_static_data();
$data['pagination'] = $this->pagination->create_links();
$data['pages'] = $this->Pages_model->get_pages();
$data['categories'] = $this->Categories_model->get_categories();  
//use limit and offset returned by _initPaginator method
$data['posts'] = $this->Posts_model->get_posts($config['limit'], $config['offset']);
// All posts
$this->output->set_content_type('application/json')->set_output(json_encode($data,JSON_PRETTY_PRINT));
}

在前端,在AngularJS中,我有:

// All posts
.controller('PostsController', ['$scope', '$http', function($scope, $http){
//Get current page (?page=2, ?page=3 etc)
const currPage = window.location.search;
// Get all the posts on the current page 
$http.get('api/' + currPage).then(function(response) {
//Categories
$scope.categories = response.data.categories;
// Posts
$scope.posts = response.data.posts;
// posts pagination
$scope.pagination = response.data.pagination;
});
}])

问题是当应用程序不在根目录中时,分页不起作用(链接指向错误的 likne((它位于 www.examplesite.com/blog,而不是在 www.examplesite.com(。

我想它与 Codeigniter 的base_url()有关,但我无法发现错误并修复它。

如何解决此问题?

看看这一行:

$config = $this->_initPagination("/", $this->Posts_model->get_num_rows());

这将路径指定为"/",作为$path传递,因此在您的function中,链接路径将是

$config['base_url'] = "http://".$_SERVER['HTTP_HOST'] . $path;

它只会在根 URL 的末尾放置一个/。您需要在索引处传递正确的后缀,而不是在不在根目录上时传递"/"

问题就在这里:

$config['base_url'] = "http://".$_SERVER['HTTP_HOST'] . $path;

因为$_SERVER['HTTP_HOST']总是没有其他目录的根。

您需要使用类似以下内容的内容:

$config['base_url'] = str_replace("/api/", "/", base_url()) . $path;

但是我建议您在前端(Angular(中实现分页,而在CI中,您只需要以下内容:

public function index($offset, $limit) {
$data = [];
$data['count'] = $this->Posts_model->get_num_rows();
$data['pages'] = $this->Pages_model->get_pages();
$data['categories'] = $this->Categories_model->get_categories();  
$data['posts'] = $this->Posts_model->get_posts($limit, $offset);
$this->output->set_content_type('application/json')->set_output(json_encode($data,JSON_PRETTY_PRINT));
}

相关内容

  • 没有找到相关文章

最新更新