Laravel 5: невозможно получить пользовательский ввод из представления

У меня есть поле ввода текстовой области на моей странице сообщений, которое я пытаюсь использовать для отправки комментариев пользователей через ajax. Но я продолжаю получать поле комментария к ошибке SQL не может быть пустым. Я уверен, что заполняю поле данными.

SQLSTATE [23000]: нарушение ограничения целостности: 1048 Комментарий столбца не может быть нулевым (SQL: вставить в значения comments (user_id, comment, parent_id, parents, updated_at, created_at) (1, , , 0, 2015-10-16 19 :16:26, 2015-10-16 19:16:26))

Выполнение dd(Input::get('commenter_comment)) дает null

Я также получаю эту ошибку в консоли

POST http://localhost/reddit/public/posts/post_this_comment 500 (внутренняя ошибка сервера)

Это мои маршруты

Route::resource('posts', 'PostsController');
Route::post('posts/post_this_comment', 'PostsController@post_this_comment');

post_this_comment() метод в PostsController

public function post_this_comment(Request $request){

    $comment = new Comment;
    $comment->user_id = Auth::id();
    $comment->comment = Input::get('commenter_comment');
    $comment->parent_id = Input::get('commenter_parent');
    if($comment->parent_id > 0){
        $my_parent = Comment::find($comment->parent_id);
        $comment->parents = $my_parent->parents.'.'.$comment->parent_id;
    }else{
        $comment->parents = '0';
    }
    $comment->save();
    $per_page = Input::get('per_page');
    $comment_list = view('eastgate.comment.comment_list')
        ->with('comments', $this->comment_list($per_page, $request))
        ->with('total_comments', $this->total_comments())
        ->with('per_page', $per_page)
        ->render();
    $response = array(
        'status' => 'success',
        'msg' => 'Comment Saved!',
        'comment_list' => $comment_list
    );
    return Response::json($response);
}

Вид

    <div class="comment-fields">
        <div class="row commenter-comment">
             <div class="form-group col-md-12">
                    <textarea id="commenter_comment" name="commenter_comment" class="form-control comment-field" title="User's comment" placeholder="Comment Text"></textarea>

              </div>
         </div>

         <div class="row commenter-name-email">
              <input type="hidden" id="commenter_parent" name="commenter_parent" class="commenter-parent" value="0">
         </div>

         <div class="row commenter-captcha">
              <div class="col-md-3 text-right">
                    <a href="javascript:void(0)" class="btn btn-info post-this-comment">Post</a>
              </div>
         </div>

      </div>

$(document).on('click', 'a.post-this-comment', function(){
    var formData = new FormData();
    var arrayelem = commenter_fields();
    var elem;
    for(var i=0, size = arrayelem.length; i<size; i++){
        elem = arrayelem[i];
        formData.append(elem, $('#'+elem).val());
    }
    formData.append('per_page', $('.comments_per_page').val());

    var request = $.ajax({ // push question data to server
        type        : 'POST', // define the type of HTTP verb we want to use (POST for our form)
        url         : 'post_this_comment', // the url where we want to POST
        data        : formData, // our data object
        dataType    : 'json',
        processData : false,
        contentType : false
    });     
    request.done(comment_done_handler); 
    request.fail(comment_fail_handler); // fail promise callback
});

person Halnex    schedule 16.10.2015    source источник


Ответы (2)


Пытаться

$comment->comment = $request->input('commenter_comment');
$comment->parent_id = $request->input('commenter_parent');

Наконец, проблема была с запросом ajax.

$(document).on('click', 'a.post-this-comment', function(){ 
var formData = 'commenter_comment='+$('textarea[name=commenter_comment]').val(); 
//formData.append('commenter_comment', $('textarea[name=commenter_comment]').val()); 
console.log(formData); 


var request = $.ajax({ // push question data to server 
type : 'POST', // define the type of HTTP verb we want to use (POST for our form) 
url : 'post_this_comment', // the url where we want to POST 
data : formData // our data object 
}); 
request.done(comment_done_handler); 
request.fail(comment_fail_handler); // fail promise callback 
});

Переход на этот формат сработал.

person Bharat Geleda    schedule 16.10.2015
comment
Не работает. я получаю Undefined property: Illuminate\Support\Facades\Request::$commenter_comment - person Halnex; 16.10.2015
comment
Извините, это моя ошибка. Я отредактировал свой ответ. Попробуй это. Если это не сработает. Внутри вашего post_this_comment просто напишите dd($request); . Благодаря этому вы сможете увидеть, все ли ваши параметры получены на стороне сервера или нет. - person Bharat Geleda; 16.10.2015
comment
Теперь я получаю Call to undefined method Illuminate\Support\Facades\Request::input() - person Halnex; 16.10.2015
comment
Убедитесь, что вы указали тип use Illuminate\Http\Request; Просто напишите эту строку вверху. и убрать использование Illuminate\Support\Facades\Request; линия. - person Bharat Geleda; 16.10.2015
comment
Я перестал получать ошибки при отправке, но dd($comment->comment); по-прежнему дает null - person Halnex; 16.10.2015
comment
dd($request-›input('commenter_comment')); Что это дает? - person Bharat Geleda; 16.10.2015
comment
Давайте продолжим это обсуждение в чате. - person Bharat Geleda; 16.10.2015

Если вы используете Laravel 5.x, не используйте Input::get(), так как версия 5 и выше предлагает использовать $request->input('something')

Вы должны использовать следующее:

use Illuminate\Http\Request;

Затем вы можете использовать:

if($request->has('commenter_comment'))
{
    $comment->comment = $request->input('commenter_comment');
}

Вышеприведенное условие if проверяет, действительно ли ввод был отправлен и имеет ли значение. Это полезно, прежде чем вы попытаетесь его использовать.

person codegeek    schedule 16.10.2015
comment
Я уже пробовал это, все еще дает ноль на dd($request->input('commenter_comment')) - person Halnex; 16.10.2015
comment
если это дает вам нулевое значение, то запрос отправляет это значение как нулевое. Вы можете проверить запрос еще раз или опубликовать данные запроса здесь? - person codegeek; 16.10.2015