Codeigniter 3.1.16路由问题

时间:2017-12-06 18:27:08

标签: codeigniter routing codeigniter-3

我在codeigniter中遇到了一些路由问题。 我的路由文件如下:

$route['admin/newgallery'] = 'gallery/do_upload';
$route['admin/listgallery'] = 'gallery/list';
$route['admin/create'] = 'posts/create';
$route['admin/listposts'] = 'posts/list';
$route['admin'] = 'admin/index';
$route['posts/(:any)'] = 'posts/view/$1';
$route['posts'] = 'posts/index';
$route['default_controller'] = 'pages/index';
$route['(:any)'] = 'pages/index/$1';
$route['404_override'] = '';
$route['translate_uri_dashes'] = FALSE;

除前两个路线外,所有路线都运行正常:

$route['admin/newgallery'] = 'gallery/do_upload';
$route['admin/listgallery'] = 'gallery/list';

当我输入mypage/admin/listgallery时,它会正确调用gallery/list。问题是当我用原始控制器/方法键入地址时(在这种情况下是图库/列表),当它应该调用404错误时它会进入列表页面!我设置的每个其他路由规则都会这样做,除了前两个!

1 个答案:

答案 0 :(得分:0)

开箱即用,Codeigniter允许您直接从URL访问任何控制器/方法。

它还提供了自定义路由的创建,因此如果您愿意,可以使用参数传递指向同一个控制器/方法的10个或更多URL!

因此,在这种情况下,您只需要访问Routes配置中任何不当的控制器/方法。

您需要测试url是否在路由配置数组中定义。

主要代码是......

create or replace trigger Phone_check
    before insert or update on PETS
    for each row
DECLARE
    SELECT phone INTO v_phone 
    FROM PEOPLE 
        INNER JOIN Family ON PEOPLE.ID=FAMILY.ID 
        INNER JOIN PETS ON FAMILY.ID=PETS.ID 
    WHERE PETS.ID=:NEW.ID;
    IF :NEW.NAME IS NOT NULL 
    AND :NEW.AGE IS NOT NULL 
    AND v_phone IS NOT NULL THEN
        :NEW.INVITATION:='Yes';
    ELSIF :NEW.NAME IS NULL 
    OR :NEW.AGE IS NULL 
    AND v_phone IS NULL THEN
       :NEW.INVITATION:='No';
    END IF;
END;

你会把它放在你想要保护的控制器构造函数中。

当然,您可以创建一个通用控制器,并以这种方式扩展您想要保护的控制器。

(不推荐)或者如果你想得到真正的" hacky"你可以将它放在system / core / controller构造函数中并使其成为系统范围。所以一切都需要在路线中定义。 注意:这会破坏' default_controller'。