天道酬勤,学无止境

用于将获取参数传递给索引函数的 Codeigniter 路由(Codeigniter routes for passing get parameter to index function)

问题

我有一个网址www.mywebsite.com/store/123456

store 是我的控制器类,我有一个索引函数,其中我在 store 之后获取值,即 123456。但我无法实现它。

正如在网上找到的那样,我尝试将其添加到路由$route['store/(:any)'] = 'store/index'; 也试过

$route['store/(:any)'] = 'store/index/$1';

但似乎不起作用。请帮帮我。

在控制器索引功能是

public function index()
    {
        echo $this->uri->segment(1);
    }

但它不起作用。请帮助

回答1

您正在调用123456()方法而不是index()方法,因此您将获得 CI 的 404。

最简单的方法就是使用这种路由

$route['store/(:any)'] = 'store/index/$1';

并且在您的情况下,在它的顶部向索引函数添加参数

public function index($parameter)
{

    echo $this->uri->segment(2);
}

请注意,我更改了段参数,请参阅文档。


使用 _remap()

function _remap($parameter){

   $this->index($parameter);
}

function index($p) 
{
    echo $p; //shows 123456 
}
回答2

如果我没记错的话:

segment(n) 在路由发生之前为您提供 uri 的段

rsegment(n) 在路由后为您提供 uri 的段(如果路由发生或与段相同,如果没有)

所以 /store/123456 被重新路由到 /store/index/123456

segment(1) == rsegment(1) == 'store'
              rsegment(2) == 'index'
segment(2) == rsegment(3) == '123456'
回答3

路线:

$route['terms_and_conditions'] = 'SO_front/page/1';

控制器 :

public function page($id)
    {
        echo $id;
    }

输出:1

回答4

这是我的 CI3 解决方案……我更喜欢 laravel 进行高级路由、orm、restapi、vuejs 构建。

$route['store/(:any)'] = 'store/index/';

public function your index(){
    $parameter=$this->uri->segment(2);
    //use parameter for sql query.
}

假设您的路线$route[store/product/update/(:any)] ,然后$parameter=$this->uri->segment(4)

问题?。 如果您计划更改路由名称,包括视图、控制器和自定义路由,则需要更改整个文件代码。

标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Codeigniter 将参数传递给控制器​​索引(Codeigniter passing parameter to controller index)
    问题 我正在使用 codeigniter 构建一个教程系统,并希望实现以下 URL 结构: /tutorials --> 包含所有类别列表的介绍页面 /tutorials/{a category as string} --> 这将给出给定类别的教程列表,例如 /tutorials/php /tutorials/{a category as string}/{an ID}/{tutorial slug} --> 这将显示教程,例如 /tutorials/php/123/how-to-use-functions /tutorials/add --> 添加新教程的页面 问题是,当我想使用前两种类型的 URL 时,我需要将参数传递给控制器​​的 index 函数。 第一个参数是可选的类别,第二个是可选的教程 ID。 我在发布之前做了一些研究,所以我发现我可以添加一个像tutorials/(:any)这样的路由,但问题是当使用最后一个 URL (/tutorials) 时,这个路由也会将add作为参数传递/添加)。 任何想法我怎么能做到这一点? 回答1 您的路由规则可以按以下顺序排列: $route['tutorials/add'] = "tutorials/add"; //assuming you have an add() method $route['tutorials/(:any)'
  • codeigniter如何根据uri段的数量设置到默认控制器的路由(codeigniter how to set routes to default controller according to the no of uri segments)
    问题 我在我的项目中使用 codeigniter 作为模块来将信息显示为类别及其项目。 我想要网址如下 sitename.com/module/ 将按随机顺序显示所有项目。 sitename.com/moduel/categoryname/ 将显示该特定类别中的所有项目 sitename.com/module/categoryname/title-of-the-item/ 这将显示该特定项目的详细信息 这里 sitename.com/module/ 是 codeigniter 的根目录,默认控制器是 home。 我的问题是如何为一个段或 uri 和两个 uri 段设置路由,例如 sitename.com/module/ 应该加载默认控制器(在我的例子中是 home) sitename.com/module/categoryname/ 应该加载 home/category/categoryname sitename.com/module/categoryname/title-of-the-item 应该加载 index/title/title-of-the-item 我将定义我的功能如下 函数索引() ... 函数类别($categoryname) .... 函数标题($title).... 所以,要么我想根据段数创建一条路线,要么如果有任何其他替代方案可以通过路由来实现这一点
  • 通过将参数传递给 codeigniter 中的构造函数来加载库(Load library by passing parameter to constructor in codeigniter)
    问题 我正在使用代码点火器。 我在 code-igniter 中定义了一个库,并且在其构造函数中需要一个参数。这是我的库代码 - ################# [My Library Code Test_lib.php ] ######################## <?php class Test_lib { var $params; public function __construct($params) { $this->params = $params; echo $this->params; } } 在 codeigniter 文档中,提到您可以在第二个参数中传递参数。 所以,我从控制器初始化它如下 - <?php class Test_cont extends CI_Controller { function __construct() { parent::__construct(); } function test() { $params = "abc"; $this->load->library("test_lib",$params); } } 我收到以下错误 - 遇到 PHP 错误严重性:警告消息:缺少参数..... 请协助。 回答1 $params必须是一个数组。 从文档: 在库加载函数中,您可以通过第二个参数将数据作为数组动态传递
  • 当我访问不存在路由的类时,如何在codeIgniter中设置默认功能?(How to set default function in codeIgniter when I visit Class with non-existent route?)
    问题 控制器是这样的: class Abc extends CI_controller{ public function index(){...} public function f1(){...} } 如果 url 是http://host/app/Abc/index它得到函数索引如果 url 是http://host/app/Abc/f1它得到函数 f1 如果 url 是http://host/app/Abc它会获取函数索引,因为它是默认值但是如果 url 是http://host/app/Abc/f2它会打印 404 not found 我预计如果 url 是http://host/app/Abc/f2它可以转向索引功能。 如果不能这样做,我想自动添加新功能,我该怎么办? 编辑我只想在特定的类中使用它,我可以编辑全局路由吗? 如何? 回答1 您可以通过两种方法首先编辑 routes.php 文件并将 404_override 更改为控制器功能,这会将您的所有 404 请求重定向到该控制器功能 form $route['404_override'] = 'welcome'; to $route['404_override'] = 'ABC/index'; 第二个选项是在控制器中,您可以使用 _remap 方法/函数来检查函数/方法是否存在。 控制器将是这样的 class Abc
  • Codeigniter 电子邮件验证传递参数(Codeigniter email verification pass parameters)
    问题 我正在尝试在注册帐户后实施电子邮件验证。 所以注册账号后,会发邮件到用户邮箱进行验证。 电子邮件是使用 codeigniter 的电子邮件类发送的。 发送邮件的代码如下 $config['wordwrap'] = TRUE; $this->email->initialize($config); $this->email->from('admin@mathplication.com', 'admin'); $this->email->to($user_email); $this->email->subject('Registration verification for mathplication'); $this->email->message(' Thanks for signing up! Your account has been created, you can login with the following credentials after you have activated your account by pressing the url below. Please click this link to activate your account: <a href='.base_url('verify').'?email='.$user_email.'
  • 如何在Codeigniter网址中组织国家/州/城市浏览(How to organize country/state/city browsing in codeigniter url)
    问题 我正在创建一个包含国家/州/城市浏览界面的网站。 出于SEO的目的,我想在URL中包含国家/地区/城市的名称。 例如,URL可能包含其他变量,并且类似于: http://www.domain.com/USA/NewYork?Category=car&color=black&Model=2009&page=5 http://www.domain.com/Spain/Allcity?Category=car&color=black&Model=2009&page=20 我需要将此功能装配到CodeIgniter中。 我不确定如何组织主要组件,特别是Controller,以及可能的Library类。 是否有标准或最佳实践方法? 回答1 编辑位于config文件夹中的routes.php文件。 如来自Bora的链接(CI URI路由)中所述,文档中的一些示例: $route['journals'] = "blogs"; //A URL containing the word "journals" in the first segment will be remapped to the "blogs" class. $route['blog/joe'] = "blogs/users/34"; //A URL containing the segments blog/joe will
  • Codeigniter--添加“active”css类到链接,怎么做?(Codeigniter--add “active” css class to link, how to?)
    问题 将“活动”类添加到链接以便可以对其进行样式设置的最快和最简单的方法是什么? 我正在 CI 中开发一个应用程序,我想要一种快速简单的方法来自动执行此操作。 jQuery 也是一个选择... 回答1 你真的应该使用 CodeIgniter URI 类来代替 $_SERVER['REQUEST_URI'] $this->uri->uri_string() if ( $this->uri->uri_string() == '/contact' ) ^^ 这是首选的做事方式,因为 codeigniter 的路由功能可能会发生一些复杂性 回答2 取决于您如何输出链接 HTML。 如果您使用的是 URL Helper 模块,那么您可以调用anchor()函数来创建链接,并将属性数组作为第三个参数传递给它,即: $this->load->helper('url'); echo anchor('url/path', 'Click here', array('class' => 'active')); 如果您只是在模板/视图中手动输出 HTML,显然您可以自己在 HTML 中创建 class 属性。 回答3 如果你有很多导航项,你可以这样做(非常简化)...... <ul> <li<?= if ( $_SERVER['REQUEST_URI'] == '/contact' ): ?> id=
  • 如何设置适当的codeigniter基本URL?(How to set proper codeigniter base url?)
    问题 当我将网站放在开发环境中时-它是url: testurl.com 现在在生产服务器上,我的codeigniter应用程序的地址必须为someurl.com/mysite/ 我将它移到那里,每次尝试运行某些功能时,例如/ home / test-它使我进入someurl.com/home/test-这是错误的。 它必须是someurl.com/mysite/home/test-如何解决? 我确实定了 $config['base_url'] = someurl.com/mysite/ 回答1 基本URL应该是绝对的,包括协议: $config['base_url'] = "http://somesite.com/somedir/"; 如果使用URL帮助器,则base_url()将输出上述字符串。 将参数传递给base_url()或site_url()将导致以下结果(假设$config['index_page'] = "index.php"; echo base_url('assets/stylesheet.css'); // http://somesite.com/somedir/assets/stylesheet.css echo site_url('mycontroller/mymethod'); // http://somesite.com/somedir/index
  • 使用codeigniter隐藏网址(Url hide using codeigniter)
    问题 我正在使用 codeigniter ......我想要一个来自以下 URL 的干净 URL http://localhost:8080/rtvnews/index.php/home/videonews?id=67598/newstitle 这里 home => 控制器,videonews => 函数和 ?id=6586565 是一个 url 字符串。 我想删除 /index.php/home/videonews?id=67598 并替换为 /news/ 在我需要获取的最终网址下方 http://localhost:8080/rtvnews/news/newstitle 回答1 要从 url 中隐藏 index.php,请使用以下 htaccess RewriteEngine On RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule ^(.*)$ index.php/$1 [L] 更多关于 htaccess URI 路由 将新闻标题视为唯一: 转到您的 route.php 文件 (application/config/routes.php)。 添加新的路由规则如下 $route['rtvnews/news/(:any)'] = 'home/videonews/$1
  • 将函数中的会话变量传递给 codeigniter 中的助手(passing a session variable in a function to a helper in codeigniter)
    问题 这就是我想要做的。 这是控制器中的功能 public function get_started() { if(test_login($this->session->all_userdata())) { $this->load->view('template'); } else { $this->load->view('error'); } } 这是帮手 function test_login($sessdata) { if($sessdata->userdata('is_logged_in')) { return true; } else { return false; } } 我已将is_logged_in作为布尔会话变量输入。 但是,这不起作用。 我找不到错误。 回答1 您可以从助手本身访问会话,而不是将会话数据作为参数传递给您的助手,例如: function test_login() { $CI = & get_instance(); //get instance, access the CI superobject $isLoggedIn = $CI->session->userdata('is_logged_in'); if( $isLoggedIn ) { return TRUE; } return FALSE; } 和控制器: public function
  • CodeIgniter 视图加载未按顺序加载?(CodeIgniter view loading not loading in order?)
    问题 我在 CodeIgniter 中有一个控制器,代码如下: $this->load->view("first"); echo "LOL"; $this->load->view("second"); 但奇怪的是,当页面呈现时,HTML 是: LOL <div id="firstView"></div> <div id="secondView"></div> 我不知道是什么导致了语句的这种重新排序。 有什么建议么? 我可能忽略了什么吗? 回答1 在代码点火器中渲染视图在最后完成。 如果你想在你去的时候渲染它们,你可以做 echo $this->load->view("first", array(), true); echo "LOL"; echo $this->load->view("second", array(), true); 回答2 这很简单: $this->load->view("..."); 不会立即显示视图。 这是稍后发生的,这是 MVC 框架的好处之一。 回答3 为了实现您的目标,您必须将第三个参数传递给函数 $this->load->view(...),表示您将在变量中接收视图,而不是立即显示它。 像这样: echo $this->load->view("first", NULL, TRUE); echo "LOL"; echo $this->load->view
  • 如何在codeigniter中修改路由(how to modify routes in codeigniter)
    问题 帮我解决这个问题。 举个例子:我有这个普通的网址“localhost/CI/index.php/base/storeurl”。 我怎样才能让 Codeigniter 知道寻找“localhost/CI/storeurl”。 我有一个名为 index 的函数,它接受 Base.php 类中的参数 storeURL。 帮我解决这个问题。 提前致谢。 回答1 我终于找到了我要找的东西。 这是我的代码在 routes.php 中的样子。 /* Custom Routes. */ // Store Normal Pages. $route['home/(:any)'] = "base/home/$1"; $route['about/(:any)'] = "base/about/$1"; $route['services/(:any)'] = "base/services/$1"; $route['contact/(:any)'] = "base/contact/$1"; $route['feedback/(:any)'] = "base/feedback/$1"; // CategoryPage. $route['category/(:any)/(:num)'] = "base/category/$1/$2"; // ProductPage. $route['product/(:any
  • Codeigniter默认控制器URL路由(codeigniter default controller url routing)
    问题 我正在整理一个简单的网站,并希望该网址的工作方式类似于Facebook,因此通过键入domain.com/username可以获取用户个人资料。 我已经可以这样了 在以下位置登录了用户个人资料 domain.com/ 其他用户的个人资料,位于 domain.com/home/username 默认控制器称为home,我目前正在使用_remap函数检查额外的url参数,以根据传递的或未传递的内容显示不同的数据。 我的问题是如何将其映射出来,以便可以通过以下方式访问用户个人资料: domain.com/username 我可以使用routes.php设置吗? htaccess? 回答1 您应该在config / routes.php中添加以下规则 // Profile Route $route['(:any)'] = 'home/$1'; 这会将您的所有请求重新路由到家庭控制器。 因此domain/michelle将重新路由为domain/home/michelle但是在这种情况下,您的所有请求都将重新路由到home控制器。 domain/pages/about也将重新路由到domain/home/pages/about False。 domain/michelle => domain/home/michelle // TRUE domain/pages/about =>
  • CodeIgniter:使用 URL 段定向到函数(CodeIgniter: Directing to functions with a URL segment)
    问题 我正在为我的公司开发一个调查系统,我在系统中设置了它,以便有两种方法可以进行调查。 1) 新调查员没有事先信息 2)调查已经发出,并创建了一个会话。 如果我希望我的 URL 看起来像: mydomain.com/SurveySystem/index.php/survey/$surveyID ($surveyID 是要进行的调查的整数) 第二种情况是我们为应试者创建一个链接。 我希望 URL 看起来像这样: mydomain.com/SurveySystem/index.php/survey/$surveySessionID/$guestID 在我的 Survey 课程中,我将其设置如下: 函数索引(){ $segments = $this->uri->total_segments(); if($segments == 1){ echo "no surveyID set"; return; } if($segments == 2){ $this->take_survey($this->uri->segment(2)); } if($segments == 3){ $this->survey_session($this->uri->segment(3), $this->uri->segment(4)); } } 当没有信息传递时,它的回声很好。 但是,如果我尝试在surveyID
  • 如何在 CodeIgniter 中显示错误消息(How to display error messages in CodeIgniter)
    问题 在我的控制器中,我放了这段代码来检查购物车是否为空: if (!$this->cart->contents()){ $this->session->set_flashdata('message', 'Your cart is empty!'); } $this->data['message'] = $this->session->flashdata('message'); $this->load->view('templates/header', $this->data); $this->load->view('bookings', $this->data); $this->load->view('templates/footer'); 在我的“预订”视图中,我设置了此代码以显示消息: <div id="infoMessage"><?php echo $message;?></div> 但是在第一页加载消息“您的购物车是空的!” 没有显示。 但是,当我按 F5 键或刷新浏览器时,它会显示。 我已经阅读了 codeigniter 的手册,上面写着“CodeIgniter 支持“flashdata”,或仅可用于下一个服务器请求的会话数据,然后会自动清除。 但是,我不知道在哪里设置此消息,因此它将在“下一个服务器请求”时可用。 回答1 无需将数据传递给视图并将其分配为
  • 在 Codeigniter 中设置管理面板(Setting up admin panel in Codeigniter)
    问题 在我的项目中,我试图为管理员创建一个部分。 在 http://philsturgeon.co.uk/blog/2009/07/Create-an-Admin-panel-with-CodeIgniter#top 之后,我尝试了第二种方法。 根据它,我的文件夹结构更改为有点像这样。 project cache config controllers -admin index.php -blog.php system views -admin index.php blog.php ................... 我在控制器/管理员中创建了一个控制器index.php ,代码如下: class Index extends CI_Controller { function __construct() { parent::__construct(); } function index() { $this->load->view(index/index); } } 在视图/管理员中,我创建了一个文件index.php并回显了一些字符串,在routes.php 中我添加了这一行, $route['admin'] = 'admin/index'; 但是当我使用 URL http://localhost/workspace/project/admin/运行管理面板时,我收到了 404
  • CodeIgniter:创建新的助手?(CodeIgniter: Create new helper?)
    问题 我需要以不同的方式循环许多数组并将其显示在页面中。 数组由模块类生成。 我知道最好不要在“视图”上包含函数,而且我想知道在哪里插入函数文件。 我知道我可以“扩展”助手,但是我不想扩展助手。 我想用我的循环函数创建一个助手。让我们称之为loops_helper.php 回答1 CodeIgniter助手是一个具有多种功能的PHP文件。 这不是一堂课 创建一个文件,并将以下代码放入其中。 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); if ( ! function_exists('test_method')) { function test_method($var = '') { return $var; } } 将此保存到application / helpers /中。 我们将其称为“ new_helper.php” 存在第一行以确保文件不能包含在内并从CodeIgniter范围之外运行。 此后的一切都是不言自明的。 使用助手 这可以在您的控制器,模型或视图中(不推荐) $this->load->helper('new_helper'); echo test_method('Hello World'); 如果您在很多地方都使用此帮助器,则可以通过将其添加到自动加载配置文件
  • 使用Codeigniter的PHP路由(SEO的URL标题)(PHP routing with Codeigniter (Titles in URL for SEO))
    问题 我对使用Codeigniter进行路由有一些疑问。 我现在正在做的事情如下: $route['articles/(:num)'] = 'articles/view/$1'; // $1 will contain an ID 这意味着example.com/articles/123可以正常工作,并加载ID为123的文章。但是我也希望可以将aticle的标题添加到URL中(对于SEO)。 示例:example.com/articles/123/article-title 我想要的东西几乎与Stack Overflow相同:stackoverflow.com/questions/123/the-title 我怎样才能做到这一点? 我也想知道堆栈溢出是如何工作的。 如果我转到stackoverflow / questions / 111,则标题将自动添加到url中。 是用php redirect()完成的吗? 回答1 我过去做过类似的事情; 我找不到它,但是IIRC(是几个月前的)您可以像以前一样使用一条路线,还可以添加一条更具体的路线,例如 $route['articles/(:num)/(:any)'] = 'articles/view/$1/$2'; $route['articles/(:num)'] = 'articles/view/$1'; 如您所见,两者都映射到相同的方法
  • 将参数传递给 jQuery 数据表中的 sAjaxSource(Passing arguments to sAjaxSource in jQuery datatables)
    问题 我正在使用 CodeIgniter,但遇到以下问题。 我在details.php有一个控制器函数,它接受一个参数: function details($id) { $this->datatables ->select('product_id, original_amount, quantity') ->from('orders'); echo $this->datatables->generate(); } 现在我需要从视图中调用它,即我希望 DataTables 像这样显示它: <script> $(document).ready(function() $('#example').dataTable({ ... 'sAjaxSource' : 'admin/data/details', ... }); </script> 那么,如何将参数传递给sAjaxSource键,即$id变量? 回答1 您应该使用fnServerParams中指定的fnServerParams 。 $(document).ready(function() { $('#example').dataTable( { "bProcessing": true, "bServerSide": true, "sAjaxSource": "scripts/server_processing.php",
  • codeigniter,将对象传递给视图(codeigniter, passing object to view)
    问题 我的 codeigniter 构造函数中有以下内容: $navbar= new stdClass(); $navbar->user_email = $this->user_email; $navbar->vp = $this->vp; 当我尝试在我的索引函数中访问它时: public function index() { var_dump($this->navbar); 这有效。 我现在尝试将 $this->navbar 传递给视图: $this->load->view('buyers/navbar', $this->navbardata); 在我看来 <?php echo 'in nav ';var_dump($this->navbar); exit; ?> 我得到: Message: Undefined property: MY_Loader::$navbar 我怎样才能使这项工作? 提前致谢, 回答1 像这样尝试 $data['navbar'] = $this->navbardata; $this->load->view('buyers/navbar', $data); 在你看来试试像 <?php echo 'in nav ';var_dump($navbar); exit; ?> 回答2 首先,创建一个这样的控制器 class Test extends CI