doutan5724 2014-01-27 13:31
浏览 61
已采纳

CodeIgniter路由:在控制器之前传递参数并将其捕获到default_controller上

I'm using a site wide parameter that controls the layout of the website. This parameter goes before anything else in the URL and is followed by the usual controller/parameters sections.

mywebsite/{section}/controller/parameter1/parameter2

I could define routes like the one bellow for each controller, but would like to avoid it as the section parameter is only relevant to the layout and not to the controllers.

$route['(:any)/controller/(:any)/(:any)'] = 'controller/$2/$3/$1';

Instead I would to be able to make the default_controller catch the first segment and store it as a view variable or session / cookie, so that the rest of the controllers can simply ignore it.

$route['(:any)/controller/(:any)/(:any)'] = 'controller/$2/$3';
  • 写回答

1条回答 默认 最新

  • dongpinken0498 2014-01-27 17:07
    关注

    As Hashem Qolami said, this is something much better served with a session or cookie.

    Routing in CodeIgniter does not alter URL's. It allows you to alter what CI does with the URL. You can use server-side functionality to do what you want (e.g. apache rewrites, nginx conf's, etc) but that is out of scope here.


    Edit:

    To do what you want without changing the URL, you can just pass the value to the view:

    Controller:

    $layout = $this->uri->segment(1);
    $data["layout"] = $layout;
    $this->load->view("cool_view", $data);
    

    cool_view.php:

        <link rel="stylesheet" type="text/css" href="<?php echo $layout; ?>.css">
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部