Laravel 表单数据未保存在 neo4j 图形数据库中

Laravel form data not saving in neo4j graph DB

我写了一个laravel form,截图如下:

我使用 neo4j 来存储该表单数据。
这是代码:
app/views/duck-form.blade.php

<!doctype html>
<html>
<head>
    <title>Laravel Form Validation!</title>

    <!-- load bootstrap -->
    <link rel="stylesheet" href="//maxcdn.bootstrapcdn.com/bootstrap/3.2.0/css/bootstrap.min.css">
    <style>
        body    { padding-bottom:40px; padding-top:40px; }
    </style>
</head>
<body class="container">

<div class="row">
    <div class="col-sm-8 col-sm-offset-2">

        <div class="page-header">
            <h1><span class="glyphicon glyphicon-flash"></span> Register! </h1>
        </div>

        @if ($errors->has())
        <div class="alert alert-danger">
            @foreach ($errors->all() as $error)
                {{ $error }}<br>        
            @endforeach
        </div>
        @endif

        <!-- FORM STARTS HERE -->
        <form method="POST" action="/ducks" novalidate>

            <div class="form-group @if ($errors->has('name')) has-error @endif">
                <label for="name">Name</label>
                <input type="text" id="name" class="form-control" name="name" placeholder="Enter your name" value="{{ Input::old('name') }}">
                @if ($errors->has('name')) <p class="help-block">{{ $errors->first('name') }}</p> @endif
            </div>

            <div class="form-group @if ($errors->has('email')) has-error @endif">
                <label for="email">Email</label>
                <input type="text" id="email" class="form-control" name="email" placeholder="Enter your email id" value="{{ Input::old('email') }}">
                @if ($errors->has('email')) <p class="help-block">{{ $errors->first('email') }}</p> @endif
            </div>

            <div class="form-group @if ($errors->has('password')) has-error @endif">
                <label for="password">Password</label>
                <input type="password" id="password" class="form-control" name="password">
                @if ($errors->has('password')) <p class="help-block">{{ $errors->first('password') }}</p> @endif
            </div>

            <div class="form-group @if ($errors->has('password_confirm')) has-error @endif">
                <label for="password_confirm">Confirm Password</label>
                <input type="password" id="password_confirm" class="form-control" name="password_confirm">
                @if ($errors->has('password_confirm')) <p class="help-block">{{ $errors->first('password_confirm') }}</p> @endif
            </div>

            <button type="submit" class="btn btn-success">Submit</button>

        </form>

    </div>
</div>

</body>
</html>

1。我将 'Artdarek\Neo4j\Neo4jServiceProvider' 添加到 app/config/app.php 中的提供程序数组。
2.我在app/config/database.php

中添加了neo4j配置
 'neo4j' => [
            'default' => [
            'host'     => 'localhost',
            'port'     => 7474,
            'username' => null,
            'password' => null,
        ],
    ],

3。然后我为该表单添加了一个控制器:

<?php

class DuckController extends BaseController {

    public function showWelcome()
    {
        return View::make('duck');
    }

}  

4。这是我的routes.php

<?php

Route::get('/', function()
{
    return View::make('hello');
});

// route to show the duck form
Route::get('ducks', function() 
{
    return View::make('duck-form');
});

// route to process the ducks form
Route::post('ducks', array('before' => 'csrf', function()
{

    // create the validation rules ------------------------
    $rules = array(
        'name'             => 'required',                       // just a normal required validation
        'email'            => 'required|email|unique:ducks',    // required and must be unique in the ducks table
        'password'         => 'required',
        'password_confirm' => 'required|same:password'          // required and has to match the password field
    );

    // create custom validation messages ------------------
    $messages = array(
        'required' => 'The :attribute is really really really important.',
        'same'  => 'The :others must match.'
    );

    // do the validation ----------------------------------
    // validate against the inputs from our form
    $validator = Validator::make(Input::all(), $rules, $messages);

    // check if the validator failed -----------------------
    if ($validator->fails()) {
        // redirect our user back with error messages       
        $messages = $validator->messages();

        // also redirect them back with old inputs so they dont have to fill out the form again
        // but we wont redirect them with the password they entered

        return Redirect::to('ducks')
            ->withErrors($validator)
            ->withInput(Input::except('password', 'password_confirm'));

    } else {
        // validation successful ---------------------------

        // our duck has passed all tests!
        // let him enter the database

        // create the data for our duck
        $duck = new Duck;
        $duck->name     = Input::get('name');
        $duck->email    = Input::get('email');
        $duck->password = Hash::make(Input::get('password'));

        // save our duck
        $duck->save();

        // redirect ----------------------------------------
        // redirect our user back to the form so they can do it all over again
        return Redirect::to('ducks')
            ->with('messages', 'Hooray!');

    }

}));

5。这是 form 的模型文件:

<?php

class Duck extends Eloquent {

    protected $fillable = array('name', 'email', 'password');

}

6.这是我 neo4j 的模型:

<?php

    //use Illuminate\Auth\EloquentUserProvider;

    class database extends Eloquent {

        public function index($name, $email, $password, $password_confirm) {

            $formData = Neo4j::makeNode();
            $formData->setProperty('name',$name)
                    ->setProperty('email',$email)
                    ->setProperty('password',$password)
                    ->setProprty('password_confirm',$password_confirm)
                    ->save();

        }

    }  

当我点击那个表单中的 submit 按钮时,我得到了这个错误:

[ Edit ]
我正在研究它:
这是我得到的新错误:

csrf 令牌问题吗?
它指向:

Route::filter('csrf', function()
{
    if (Session::token() != Input::get('_token'))
    {
        throw new Illuminate\Session\TokenMismatchException;
    }
});

5 小时后我无法解决它,并且数据未存储在 neo4j 数据库中。我该如何解决?

您的代码看起来不错,您可能需要 运行

composer dump-autoload

使用 CSRF Protection Filter 时,您的表单必须在 blade 中这样声明:

{{ Form::open(array('method' => 'POST', 'action' => URL::to("/ducks"))) }}

并关闭:

{{ Form::close() }}

这将在您的 html 中呈现与使用相同的表单:

<form method="POST" action="{{ URL::to("/ducks") }}">...</form>

但也会添加您缺少的隐藏 _token 元素:

<input type="hidden" name="_token" value="value_of_token"/>

希望对您有所帮助!

编辑

或者,如果您不想重新创建 <form>,您可以简单地使用:

{{ Form::token() }}

在现有 <form> 标签内的某处创建它。