我们希望摆脱旧的Flex项目,将其重建为HTML5。因此,我们在Angularjs2中构建了一个概念证明,并希望将这些服务集成到现有的PHP Symfony 2后端中。但是,由于Angular在localhost:3000上使用nodejs运行“开箱即用”,而且Symfony2项目在localhost:8888上运行,因此会出现会话问题。从localhost:3000发送的请求在登录时每次调用都会返回不同的PHPSESSID,因此服务器不记得该用户。
解决此问题的最佳方法是什么?
我可以从localhost:8888运行Angularjs项目吗?如果我尝试它抱怨它不是从localhost:3000运行。
答案 0 :(得分:1)
让我展示一个没有NodeJs的例子
首先,你必须安装NelmioCorsbundle
和FosRestbundle
,而不是像
nelmio_cors:
paths:
'^/':
origin_regex: true
allow_origin: [ 'http://your-domain.com' ] << your frontend
allow_headers: ['Origin','Accept','Content-Type']
allow_methods: ['POST', 'PUT', 'GET', 'DELETE']
max_age: 3600
hosts:
- "^(http?://)?api\.your-domain.com?" << your backend as subdomain
fos_rest:
param_fetcher_listener: true
body_listener: true
format_listener: true
view:
view_response_listener: 'force'
在app.service(前端)
中写下你的常规getteryourApp.factory('appService', ['$http', '$q', '$localStorage',
function($http, $q, $localStorage)
{
var $this = {};
$this.mainGetter = function(action, config) {
var deferred = $q.defer();
$http({
method: 'GET',
url: $this.domain + action,
params: config
}).then(function(data) {
deferred.resolve(data);
}, function(error) {
deferred.reject(error);
});
return deferred.promise;
};
return $this;
}]);
然后在后端创建一个端点
/**
* API Controller
* @CFG\Route("/api")
*/
class ApiController extends FOSRestController
{
/**
* @CFG\Route("/get-something", name="get_smt")
* @CFG\Method("GET")
* @param Request $request
* @return JsonResponse
*/
public function getPostsAction(Request $request)
{
$em = $this->getDoctrine()->getManager();
$something = $em->getRepository('SomeRepo')->findAll();
$serializer = $this->get('jms_serializer');
return new JsonResponse([
'isError' => 0,
'data' => $serializer->serialize($something, 'json')
]);
}
};
最终从角度控制器或服务中获取数据
$this.getApiData = function(alias) {
var deferred = $q.defer();
appService.mainGetter('/get-something', {})
.then(function(response) {
var data = response.data;
if (data.isError) {
deferred.reject(data.error);
} else {
deferred.resolve(data.data);
}
});
return deferred.promise;
};
答案 1 :(得分:0)
好的,谢谢你,D.Dimitrioglo,最后的评论,&#39;这只是一个通知,不是错误。不要注意这个,所以我没有花时间搞清楚为什么我的主人没有被移植。我需要nodejs来编译我使用的TypeScript到Javascript,所以不是这样。我也没有明确需要NelmioCorseBundle和FosRestBundle。我的问题是
之后我的会话在登录后保留了!感谢你的评论,它引导我朝着正确的方向前进!