2015-01-21 37 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