回复后
form.components.ts
OnSubmit(form : NgForm){
this.userService.addUser(form.value).subscribe((data : any)=> {
if(data.Succeeded ==true){
console.log("Sent");
}
});
}
user.service
addUser(user: User){
const body: User = {
UserName: user.UserName,
Password: user.Password,
Email: user.Email,
FirstName: user.FirstName,
LastName: user.LastName
}
return this.http.post(this.url , body);
}
我是angular and Symfony的新手。我还没有看到很多关于如何进行上述操作的教程。在上面的代码中,我通过API将数据发送到Angular 5的symfony。我的问题是如何从api获取所有数据并插入到mysql中。
答案 0 :(得分:1)
Symfony有很多方法可以实现这一目标。我将假设您使用基本的Symfony堆栈Doctrine作为ORM,您的实体已经创建,并且您已经拥有一个具有Request参数的控制器。
优化方式
首先需要使用Serializer service反序列化响应。如果响应有效,您将获得用户实体的对象,其中包含您的请求数据。
然后,使用实体管理器将persist数据导入数据库。
您还可以使用某些validation在持久化之前验证数据,并在需要时返回错误。
通过自动装配和自动配置,您的所有控制器都将注册为服务,并且您的所有依赖都将被注入。所以你可以这样做:
#Determine the last empty row - brute force.
For ($i = $outputWorksheet.UsedRange.Rows.Count; $i -gt 1; $i--) {
if (!$Excel.WorksheetFunction.CountA($outputWorksheet.Range("$($i):$($i)")) -eq 0) {
$lastRow = "A$($i + 1)"
Break;
}
}
如果没有自动装配和自动配置,您只需使用Controller类的get()函数和getDoctrine()快捷方式:
class AcmeController extends Controller
{
private $serializer;
private $entityManager;
public function __construct(Serializer $serializer, EntityManager $entityManager) {
$this->serializer = $serializer;
$this->entityManager = $entityManager;
}
public function myAction(Request $request) {
$user = $this->serializer->deserialize($request->request->all(), User::class, 'json');
/** validate your data, the $user will be false if the serializer encountered an error **/
$this->entityManager->persist($user);
$this->entityManager->flush();
/** Return whatever Response object you need **/
}
}
" easy"方式强>
您也可以使用forms。创建与您的用户实体对应的表单。
这样的事情应该可以解决问题。但是,请注意字段的名称。如果您的API字段名称与您的实体字段名称不对应,则可能需要使用property-path选项。
class AcmeController extends Controller
{
public function myAction(Request $request) {
$user = $this->get('serializer')->deserialize($request->request->all(), User::class, 'json');
/** validate your data first, the $user will be false if the serializer encountered an error **/
$this->getDoctrine()->getManager()->persist($user);
$this->getDoctrine()->getManager()->flush();
/** Return whatever Response object you need **/
}
}
然后,在您的控制器中,提交它并保留您的数据:
class UserForm extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('LastName')
->add('FirstName')
->add('password', PasswordType::class)
->add('Email', EmailType::class)
->add('UserName')
;
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults([
'data_class' => User::class,
]);
}
}
正如我所说,第一种方式更加优化,因为Form对象将在" easy"中创建。方式,有点大。但是,当你是新来者时,使用和理解它会更加困难。
使用您认为合适的人。