【发布时间】:2015-07-04 14:52:11
【问题描述】:
我是 Symfony 的新手,已经开始阅读和玩弄。我能够安装 Symfony2 和 NEO4j 数据库。我还能够将引导程序包含到我的 Symfony 项目中并显示一个基本主页。
我现在想将我的项目连接到数据库。我想从注册和用户系统等基本功能开始。
我目前正在使用以下(通过 composer 安装):
"everyman/neo4jphp": "dev-master",
"hirevoice/neo4jphp-ogm": "dev-master",
"klaussilveira/neo4j-ogm-bundle": "dev-master"
这些应该给我我需要的功能。然后我在 src 下创建了一个具有以下文件夹结构的 UserBundle:
src
|-Controller
|-DependencyInjection
|-Entity
|-Form
|-Ressources
|-UserBundle.php
我现在想通过http://symfony.com/doc/current/cookbook/doctrine/registration_form.html 上的教程,但我不想使用他们的数据库,而是想使用 Neo4j。有人能指出我应该在哪里以及如何操作教程的代码以便能够将用户注册到 neo4j 图表中吗?我已经尝试过自己,但文档很少见 neo4j-ogm,而且我只在错误时产生错误。我现在已经删除了 Bundle 并重新创建它以重新开始。
如果它们是被假定为常识并因此被忽略的步骤,我特别感兴趣?
我现在已经能够设置所有内容,以便显示注册表单。但是提交的时候报错:
Unable to commit batch [401]:
Headers: Array
(
[Date] => Sun, 05 Jul 2015 13:08:20 GMT
[Content-Type] => application/json; charset=UTF-8
[WWW-Authenticate] => None
[Content-Length] => 139
[Server] => Jetty(9.2.4.v20141103)
)
Body: Array
(
[errors] => Array
(
[0] => Array
(
[message] => No authorization header supplied.
[code] => Neo.ClientError.Security.AuthorizationFailed
)
)
)
500 Internal Server Error - Exception
我假设我的连接身份验证不起作用。在我的 config.yml 中,我定义了以下连接:
# Neo4j config
neo4j_ogm:
transport: 'curl'
host: 'localhost'
port: 7474
username: 'foo'
password: 'bar'
debug: true
但这似乎不起作用。我还需要在哪里设置连接详细信息?
更新
感谢 Christophe Willemsen 的回答。
由于身份验证不起作用而产生错误。通过导航到 Neo4j 安装文件夹并编辑“neo4j-server.properties”文件以允许所有访问,我现在可以将简单数据保存到图表中。我没有尝试实施任何检查或密码加密,但是非常基本的“创建具有属性的节点”现在可以工作了。
我现在想要完成的是:
- 使密码保护 Neo4j 连接成为可能,并拥有 存储在 config.yml 文件中的连接信息
- 创建并实施各种检查(电子邮件地址是否已在 DB / 密码是否足够强大...)
- 创建和实施密码加密
- 创建从 neo4j 数据库中获取数据的成员系统
如果您对我在哪里可以获得有关此主题的更多信息有任何提示,或者如果您已经做过类似的事情,我们将不胜感激。
已将文件添加到我下面的帖子中,以防它们对其他人有用。 请注意:我才刚刚开始学习 Symfony 和 Neo4j,代码可能包含错误或重大漏洞。如果我有幸实现更多与 neo4j 相关的东西,我也会尝试更新这篇文章。
在文件“neo4j-server.properties”(位于我安装的“/etc/neo4j”下)中,编辑以下行:
# Let the webserver only listen on the specified IP. Default is localhost (only
# accept local connections). Uncomment to allow any connection. Please see the
# security section in the neo4j manual before modifying this.
org.neo4j.server.webserver.address=0.0.0.0
# Require (or disable the requirement of) auth to access Neo4j
dbms.security.auth_enabled=false
在我的 UserBundle 中,其他人可能会感兴趣以下文件: "/src/UserBundle/Controller/AccountController.php"
<?php
// src/Acme/AccountBundle/Controller/AccountController.php
namespace UserBundle\Controller;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use UserBundle\Form\Type\RegistrationType;
use UserBundle\Form\Model\Registration;
use Symfony\Component\HttpFoundation\Request;
// use HireVoice\Neo4j\EntityManager as EntityManager;
class AccountController extends Controller
{
public function registerAction()
{
$registration = new Registration();
$form = $this->createForm(new RegistrationType(), $registration, array(
'action' => $this->generateUrl('account_create'),
));
return $this->render(
'UserBundle:Account:register.html.twig',
array('form' => $form->createView())
);
}
public function createAction(Request $request)
{
$em = $this->container->get('neo4j.manager');
//$repo = $em->getRepository('Entity\\User');
$form = $this->createForm(new RegistrationType(), new Registration());
$form->handleRequest($request);
if ($form->isValid()) {
$registration = $form->getData();
$em->persist($registration->getUser());
$em->flush();
return $this->redirectToRoute('account_success');
// return $this->redirect('http://4740.hostserv.eu/twohive/web/app_dev.php/register/success');
}
return $this->render(
'UserBundle:Account:register.html.twig',
array('form' => $form->createView())
);
}
public function successAction()
{
return $this->render('UserBundle:Account:success.html.twig');
}
}
"/src/UserBundle/Entity/User.php"
<?php
// src/UserBundle/Entity/User.php
namespace UserBundle\Entity;
use HireVoice\Neo4j\Annotation as OGM;
/**
* @OGM\Entity
*/
class User
{
/**
* @OGM\Auto
*/
protected $id;
/**
* @OGM\Property
* @OGM\Index
*/
protected $email;
/**
* @OGM\Property
*/
protected $plainPassword;
public function getId()
{
return $this->id;
}
public function getEmail()
{
return $this->email;
}
public function setEmail($email)
{
$this->email = $email;
}
public function getPlainPassword()
{
return $this->plainPassword;
}
public function setPlainPassword($password)
{
$this->plainPassword = $password;
}
}
“/src/UserBundle/Form/Model/Registration.php”(如 Symfony-Book 中所述)
<?php
// src/Acme/AccountBundle/Form/Model/Registration.php
namespace UserBundle\Form\Model;
use Symfony\Component\Validator\Constraints as Assert;
use UserBundle\Entity\User;
class Registration
{
/**
* @Assert\Type(type="UserBundle\Entity\User")
* @Assert\Valid()
*/
protected $user;
/**
* @Assert\NotBlank()
* @Assert\True()
*/
protected $termsAccepted;
public function setUser(User $user)
{
$this->user = $user;
}
public function getUser()
{
return $this->user;
}
public function getTermsAccepted()
{
return $this->termsAccepted;
}
public function setTermsAccepted($termsAccepted)
{
$this->termsAccepted = (bool) $termsAccepted;
}
}
“/src/UserBundle/Form/Type/RegistrationType.php”(如 Symfony-Book 中所述)
<?php
// UserBundle/Form/Type/RegistrationType.php
namespace UserBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
class RegistrationType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('user', new UserType());
$builder->add(
'terms',
'checkbox',
array('property_path' => 'termsAccepted')
);
$builder->add('Register', 'submit');
}
public function getName()
{
return 'registration';
}
}
"/src/UserBundle/Form/Type/UserType.php"(如 Symfony-Book 中所述)
<?php
// UserBundle/Form/Type/UserType.php
namespace UserBundle\Form\Type;
use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\OptionsResolver\OptionsResolver;
class UserType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('email', 'email');
$builder->add('plainPassword', 'repeated', array(
'first_name' => 'password',
'second_name' => 'confirm',
'type' => 'password',
));
}
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'UserBundle\Entity\User'
));
}
public function getName()
{
return 'user';
}
}
"/src/UserBundle/Resources/config/routing.yml"
account_register:
path: /register
defaults: { _controller: UserBundle:Account:register }
account_create:
path: /register/create
defaults: { _controller: UserBundle:Account:create }
account_success:
path: /register/success
defaults: { _controller: UserBundle:Account:success }
【问题讨论】:
标签: php symfony doctrine-orm neo4j