【发布时间】:2015-09-17 13:24:53
【问题描述】:
好的,我遇到的问题是使用 CakePhp (v3) 和 AngularJS。我想纯粹使用 CakePhp 来托管我的 JSON 网络服务。我有这个工作和以 API 为前缀的路由。我遇到的问题是让 Html 5 路由与 Angular 一起工作。例如,如果我去http://localhost/appname/home 我希望 Angular 拦截这条路线而不是 CakePhp。目前,如果我这样做,CakePhp 会抱怨 HomeController 不存在。我发现这个堆栈溢出post 使我能够获得 Angular Hashtag 路由功能/同时维护 /api/* 路由,但我真的不喜欢让我的路由看起来像 http://localhost/appname/#/home。我觉得应该进行 .htaccess 更改以允许 Cake 处理默认 URL 路径(即:http://localhost/,因此默认打开 home.ctp),否则只查找 http://localhost/api/* 前缀路由。不幸的是,我确实尝试添加RewriteRule ^/api/*,但没有运气。我通常不在 Apache/PHP 中工作,所以我很难找到解决这个问题的方法。另外,我确保在我的 httpd.conf 文件中启用了重写模块。这是我当前的 routes.php 文件,显示了 API 前缀和在访问主机根目录时调出 home.ctp 的默认路由。非常感谢经验丰富的 *AMP 开发人员提供的任何指导!
<?php
use Cake\Core\Plugin;
use Cake\Routing\Router;
Router::defaultRouteClass('Route');
Router::prefix('api', function ($routes) {
$routes->extensions(['json', 'xml']);
$routes->resources('Users');
$routes->resources('UserInfo');
Router::connect('/api/users/register', ['controller' => 'Users', 'action' => 'add', 'prefix' => 'api']);
Router::connect('/api/userinfo/create', ['controller' => 'UserInfo', 'action' => 'add', 'prefix' => 'api']);
$routes->fallbacks('InflectedRoute');
});
Router::scope('/', function ($routes) {
$routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']);
$routes->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']);
$routes->fallbacks('InflectedRoute');
});
Plugin::routes();
【问题讨论】:
-
Angular 不是服务器端技术...无论浏览器发送到服务器的 url 是什么,它都会首先由您的 php 应用程序获取。
-
何塞谢谢你,是的,我完全知道 Angular 是一种客户端技术。尽管使用 Cakephp 忽略所有非 /api/ 路由,但我应该能够启用 html 5 路由。这就是我问题的症结所在。通过在 Angular 上启用 html5 路由,我将能够在没有默认 # 路由机制的情况下访问路由,从而获得更清晰的 URL。有意义吗?
标签: angularjs cakephp cakephp-3.0 angularjs-routing