【问题标题】:CakePHP admin and website routerCakePHP 管理员和网站路由器
【发布时间】:2015-01-07 19:16:25
【问题描述】:

我正在学习 CakePHP,我正在构建一个 CMS,但我似乎无法正确设置我的路由器。

每个 url 都应该使用 WebsiteController 的 index 动作,除了“admin”

/admin 有效,但是当我转到 /foobar 时,它会询问 FoobarController

Router::connect("/admin/:controller/:action", 
    array("controller" => "admin")
);
Router::connect("/", 
    array("controller" => "website", "action" => "index")
);
Router::connect("/:slug/*", 
    array("controller" => "website", "action" => "index"), 
    array("pass" => array("slug"), "slug" => '(?!admin)')
);

【问题讨论】:

  • 我已经编辑了这个问题,/admin 工作,其余的没有
  • 为什么需要管理控制器?恕我直言,出于多种原因,最好使用前缀路由并将代码保留在上下文中,请参阅book.cakephp.org/2.0/en/development/routing.html#prefix-routing
  • 我是,管理员是仪表板。剩下的都是带前缀的。

标签: php cakephp routing


【解决方案1】:

我认为问题出在"slug" => '(?!admin)'。无论如何你都不需要它,因为以 /admin 开头的 url 已经被你的第一条路由捕获了。

其他问题,以下路线没有意义:

Router::connect("/admin/:controller/:action", 
   array("controller" => "admin")
);`

它基本上告诉管理控制器和 foobar 控制器处理 /admin/foobar url。

试试这个:

Router::connect("/admin",
    array("controller" => "admin", "action" => "index")
);
Router::connect("/admin/:action",
    array("controller" => "admin")
);
Router::connect("/",
    array("controller" => "website", "action" => "index")
);
Router::connect("/:slug/*",
    array("controller" => "website", "action" => "index"),
    array("pass" => array("slug"))
);

【讨论】:

  • 当我尝试这个时,/admin 也会去网站 index()
  • 是的,我回答得太快了。我编辑了我的答案,希望效果更好。
  • 代码确实有效,但 /admin/pages(Pages 是一个控制器)现在显示该页面,因为它是网站的一个页面
  • 在您的问题中,您没有描述应该处理“/admin/foobar”的内容。我假设答案是控制器 => 管理员,操作 => foobar。
  • 与其使用“admin”控制器,不如使用带前缀的 admin_ 操作来保持代码在上下文中。见book.cakephp.org/2.0/en/development/routing.html#prefix-routing
【解决方案2】:

所以,我想通了。

通过删除:

Router::connect("/admin/:action",
    array("controller" => "admin")
);
Router::connect("/",
    array("controller" => "website", "action" => "index")
);

并添加:

Router::connect("/admin",
    array("controller" => "admin", "action" => "index")
);

Router::connect("/:slug",
    array("controller" => "website", "action" => "index"),
    array("pass" => array("slug"))
);

特别感谢PGBI

【讨论】:

    猜你喜欢
    • 2013-05-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-05
    • 2015-12-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多