2015-01-21 85 views
1

Laravel表单数据我写了一个laravel form,它的屏幕快照,如下所示:
form
,而且我用的Neo4j用于存储的表单数据。
下面是代码:
app/views/duck-form.blade.php在Neo4j的图形不节能DB

<!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的DB。我该如何解决它?

+0

它预计在您的HTML表单中隐藏_token输入,我找不到它。所以是的,它似乎是一个csrf令牌问题。 – 2015-01-21 14:42:43

+0

那么....我该如何解决它? – 2015-01-21 14:47:40

+1

我不熟悉Laravel,但更多与Symfony,所以也许文档可以帮助你http://laravel.com/docs/4.2/html#csrf-protection – 2015-01-21 14:49:16

回答

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>标签内创建它。

+0

真棒,男人!谢谢:) – 2015-01-21 15:58:06

+0

没有问题:) – 2015-01-21 15:58:46

+0

投票我的问题,如果你想:) – 2015-01-21 16:01:10

0

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

composer dump-autoload 
+0

检查更新的问题....我试着'转储已经加载了。它没有工作 – 2015-01-21 13:43:27