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

时间:2015-01-21 11:39:22

标签: php forms laravel neo4j csrf-protection

我写了一个laravel form,其屏幕截图如下:
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.我在neo4j

中添加了app/config/database.php配置
 '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按钮时,我收到此错误:
error
[ Edit ]
我正在研究它:
这是我得到的新错误:
error1
这是csrf令牌问题吗? 它指向:

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

我无法解决它,因为5小时后数据没有存储在neo4j数据库中。我该如何解决?

2 个答案:

答案 0 :(得分:1)

使用CSRF Protection Filter时,您的表单必须在您的刀片中声明:

{{ 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>标记内的某处创建它。

答案 1 :(得分:0)

您的代码看起来很好,可能需要运行

composer dump-autoload