这看起来非常基本,但我无法理解它.
我正在尝试向控制器中的方法发送多个参数,如下所示:
http://localhost/ci/index.php/subjects/3/state
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的路线:
$route['subjects/(:num)'] = 'subjects/view/$1';
$route['subjects/(:num)/{:any}'] = 'subjects/view/$1/$2';
Run Code Online (Sandbox Code Playgroud)
方法接受2个参数:
public function view($slug, $id = null){
}
Run Code Online (Sandbox Code Playgroud)
但我似乎得到了404.我怎么能让这个工作?我需要view方法总是接受1个参数和可选的其他参数.
注意:我包括网址助手.
codeigniter codeigniter-url codeigniter-2 codeigniter-routing
由于技术原因,我不想使用.htaccess从CodeIgniter中的URL中删除index.php.我看过路线部分.我也尝试过这样的路线:
$route['(:any)'] = 'index.php/$1';
Run Code Online (Sandbox Code Playgroud)
但它没有用.
是否可以index.php使用CodeIgniter中的路由器删除?
我正在尝试在我的codeigniter应用程序中实现页面模板,模板工作正常,例如,我有一个博客页面,我试图指定为我的主页,具有不同的视图和分页等等.当我写www.mywebsite.com/blog时,它会在主页模板中打开,或者假设我有一个页面www.mywebsite.com/about,它也会在页面模板中打开.但是当我尝试通过www.mywebsite.com访问我的网站时,我有一个404错误页面.如何将我的博客页面指定为主页?
页面控制器:
class Page extends Frontend_Controller {
public function __construct(){
parent::__construct();
$this->load->model('page_m');
}
public function index() {
// Fetch the page template
$this->data['page'] = $this->page_m->get_by(array('slug' => (string) $this->uri->segment(1)), TRUE);
count($this->data['page']) || show_404(current_url());
add_meta_title($this->data['page']->title);
add_meta_keyword($this->data['page']->keywords);
add_meta_description($this->data['page']->description);
// Fetch the page data
$method = '_' . $this->data['page']->template;
if (method_exists($this, $method)) {
$this->$method();
}
else {
log_message('error', 'Could not load template ' . $method .' in file ' . __FILE__ . ' at line ' . __LINE__);
}
// Load the view
$this->data['subview'] …Run Code Online (Sandbox Code Playgroud) 当我遇到障碍时,我正在阅读官方Code Igniter教程...
该教程让我保存并运行此代码:
<?php
class Blog extends Controller {
function index()
{
echo 'Hello World!';
}
function comments()
{
echo 'Look at this!';
}
}
?>
Run Code Online (Sandbox Code Playgroud)
如果我输入以下网址:
index.php/blog
它工作并显示"Hello World!".
当我修改URL以显示注释时,如下所示:
index.php/blog/comments/
我得到了404.
我想知道是否有任何简单的方法在代码点火器中调试路由?
我希望能够在日志中看到以下内容:
Client sent : apps/something
Route found : apps/(:any) --> applications/searchbyname/$1
Redirecting : apps/something --> applications/searchbyname/something
//and just cause we can lets make the searchbyname function not exist
ERROR - 2012-09-16 22:10:05 --> 404 Page Not Found --> applications/searchbyname/something
Run Code Online (Sandbox Code Playgroud)
基本上它意味着我们可以看到我们何时到达路线以及它何时尝试加载.
有没有办法在这些方面启用某些东西?
我目前正在使用CodeIgniter开发一个网站,我最近偶然发现了一个路由和.htaccess问题.
基本上,我的简单网站的结构(为简单起见,我们称之为'CIExample'项目)如下:
-Home-
关于我们
- 我们的
服务
- 新闻
- 联系我们
我使用Page控制器实现的.该控制器有5个函数调用各自的页面视图,即:
Home(),调用"Home"
About()视图,调用"关于我们"视图等等.
以前,要访问'Home',我需要输入http://localhost/CIExample/index.php/page/homeurl窗口,但在设置以下路径后,我能够删除'page'(classname)部分:
$route['default_controller'] = 'page/home';
$route['home'] = 'page/home';
$route['about'] = 'page/about';
$route['service'] = 'page/service';
$route['news'] = 'page/news';
$route['contact'] = 'page/contact';
Run Code Online (Sandbox Code Playgroud)
然而,当我尝试删除'index.php'时,棘手的部分出现了.我希望能够通过键入来访问主页http://localhost/CIExample/home.
所以我在CI论坛/教程/堆栈溢出上做了很多搜索,并找到了.htaccess文件的一些代码:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ index.php/$1 [L]
Run Code Online (Sandbox Code Playgroud)
或http://ellislab.com/forums/viewthread/197675/#929904
我尝试了两个代码,但没有一个工作..
http://localhost/CIExample/home将指示我找到404找不到的页面,但http://localhost/CIExample/index.php/home会工作得很好.
我想知道出现了什么错误?是我的routes.php还是.htaccess或两者兼而有之?谢谢.
注意:我还更改了'config/config.php'文件 - > $config['index_page'] = '';
编辑:
最后它的作品!在config文件夹中调整config.php文件并设置以下内容$config['uri_protocol'] = 'PATH_INFO';(来自'AUTO').
可用值:
| 'AUTO' Default - auto …Run Code Online (Sandbox Code Playgroud) 我有一个控制器,它具有几种应该共享共同信息的方法。假设我的URI格式如下:
http://server/users/id/admin/index
http://server/users/id/admin/new
http://server/users/id/admin/list
http://server/users/id/admin/delete
Run Code Online (Sandbox Code Playgroud)
我需要从数据库中检索一些信息,并使id它们可用于所有方法,而不是在每个方法中都写一行以调用模型。我怎样才能做到这一点?
开始我的第一个CI项目,我只是想知道如何处理URL参数?我有一个名为'city'的控制器,我修改了我的mod_rewrite,因此localhost/codeigniter使用重写到localhost/codeigniter/city.我想要做的是在URL的末尾添加一个城市名称,并使用get segment来查询表.
所以我的例子是localhost/codeigniter/edinburgh.我会抓住最后一段,然后创建SQL查询.但是我认为当我将爱丁堡放入URL时,CI认为我正在寻找一个名为"爱丁堡"的控制器.
我是否必须添加路由或类似的东西?
我的类别控制器中有一个名为“插入”的功能。当我通过像这样的 url 调用该函数时:/categories/insert 它工作正常,但如果我像这样调用该函数:/categories/insert/(末尾有斜杠)该函数将被调用三次。
即使当像这样调用我的编辑函数时:/categories/edit/2 - 编辑函数被调用三次。
在 config/routes.php 中我只有默认路由。我的 .htaccess 是这样的:
RewriteEngine on
RewriteCond $1 !^(index\.php|images|include|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]
Run Code Online (Sandbox Code Playgroud)
编辑:
编辑功能的代码:
public function edit($id = '')
{
$this->load->helper("form");
$this->load->library("form_validation");
$data["title"] = "Edit category";
$this->form_validation->set_rules('category_name', 'Category name', 'required');
if (!$this->form_validation->run())
{
$data['category'] = $this->categories_model->get_categories($id);
$this->load->view("templates/admin_header", $data);
$this->load->view("categories/edit", $data);
$this->load->view("templates/admin_footer", $data);
}
else
{
$this->categories_model->update($id);
// other logic
}
}
Run Code Online (Sandbox Code Playgroud) 在我的本地网站
http://localhost/giftsware/nl/products/details/2382
这是我的产品说明页面的浏览器网址,我想要更多用户友好的网址,用于产品说明页面.我想更改以上网址
http://localhost/giftsware/products/2382
我尝试通过添加将所有调用路由到详细信息
$ route ['products /(:any)'] ="nl/products/details/$ 1";
这是在routes.php文件中,但它给我404错误.可能是什么问题,我该如何解决?
这是我的完整路线文件代码
$route['(:any)/products/(:num)'] = "products/details/$2";
$route['default_controller'] = "pages";
$route['404_override'] = '';
$route['^en/admin/([a-zA-Z_-]+)/(:any)'] = '$1/admin/$2';
$route['^en/admin/(login|logout)'] = 'admin/$1';
$route['^en/admin/([a-zA-Z_-]+)'] = '$1/admin/index';
$route['^nl/admin/([a-zA-Z_-]+)/(:any)'] = '$1/admin/$2';
$route['^nl/admin/(login|logout)'] = 'admin/$1';
$route['^nl/admin/([a-zA-Z_-]+)'] = '$1/admin/index';
$route['admin'] = 'admin';
$route['pages/(:any)'] = "pages/index/$1";
$route['^nl/(.+)$'] = "$1";
$route['^en/(.+)$'] = "$1";
$route['^nl$'] = $route['default_controller'];
$route['^en$'] = $route['default_controller'];
Run Code Online (Sandbox Code Playgroud) php .htaccess mod-rewrite codeigniter-url codeigniter-routing