gpt4 book ai didi

php - 将 Angularjs 2 项目集成到现有的 Symfony 2 项目中

转载 作者:搜寻专家 更新时间:2023-10-31 21:25:01 25 4
gpt4 key购买 nike

我们想摆脱旧的 Flex 项目,将其重建为 HTML5。因此,我们正在 Angularjs2 中构建概念验证,并希望将服务集成到现有的 PHP Symfony 2 后端中。但是由于 Angular 在 localhost:3000 上与 nodejs 一起运行“开箱即用”,而 Symfony2 项目在 localhost:8888 上运行,我遇到了 session 问题。从 localhost:3000 发送的请求在登录后的每次调用中都会返回不同的 PHPSESSID,因此服务器不会记住用户。

解决这个问题的最佳方法是什么?

我可以从 localhost:8888 运行 Angularjs 项目吗?如果我尝试这样做,它会提示它不是从 localhost:3000 运行的。

enter image description here

最佳答案

让我展示一个没有 NodeJs 的例子

首先,您必须安装 NelmioCorsbundleFosRestbundle,然后像这样配置它们

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(前端)中编写您的通用 getter

yourApp.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')
]);
}
};

最终从您的 Angular Controller 或服务获取数据

  $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;
};

关于php - 将 Angularjs 2 项目集成到现有的 Symfony 2 项目中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38157749/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com