我想从url中删除控制器名,如果可能的话


I want to remove controller name from url in every controller is it possible?

我想从每个控制器中删除控制器名称,是否可以在路由文件中这样做。对于单个控制器,它对我来说工作得很好,如果我想在我的项目中使用所有控制器怎么办?

$route['default_controller'] = 'user';
$route['(:any)'] = "user/$1";
$route['(:any)/(:any)'] = "user/$1/$1";
$route['(:any)/(:any)/(:any)'] = "user/$1/$1/$1";

$route['(:any)'] = "grant/$1";
$route['(:any)/(:any)'] = "grant/$1/$1";
$route['(:any)/(:any)/(:any)'] = "grant/$1/$1/$1";

当我尝试这个时,它不适合我

try this

你可以试试这些

// url could be yourdomain/imran
$route['(:any)'] = 'profile/index/$1';
// url could be yourdomain/10
$route['(:num)'] = 'profile/index/$1';
// url could be yourdomain/imran10
$route['([a-zA-Z0-9]+)'] = "profile/index/$1";

你的类可能看起来像这样

class Profile extends CI_Controller {
    public function index($id)
    {
        // $id is your param
    }
}

更新: (Be careful)

请记住,如果你有一个类Someclass,你使用urlyourdomain/Someclass,那么这将被路由到profile/index/$1,如果你有$route['(:any)']$route['([a-zA-Z0-9]+)']

我得到答案了

$route['(:any)'] = "user/$1"; //this is dynamically for user controller

以静态方式为另一个控制器设置

$route['functionName'] = "controller/functionName";
$route['functionName'] = "controller/functionName";

这个工作对我来说很好,我希望如果这是可能的动态

您提供的代码示例将不起作用,因为规则完全相同,例如:

$route['(:any)'] = "user/$1";
$route['(:any)'] = "grant/$1";

两者之间没有区别,那么应用程序如何知道将请求路由到哪里呢?它只会为所有请求(用户控制器)选择第一个匹配的路由

你想要达到的目的是不可能的,除非(如@syed)已经试着在上面解释,至少在url的次要部分有差异。

例如,任何数字id都传递给用户控制器。

// url could be yourdomain/10
$route['(:num)'] = 'user/index/$1';

任何基于文本的都被传递到不同的控制器

// url could be yourdomain/imran
$route['([A-z]+)'] = "name/index/$1";

以此类推。

相关文章: