2014-09-29 4 views
1

Я пытаюсь понять, почему, возвращая массив json, используя Laravel's Response::json, я получаю пустой объект, где он должен возвращать html-блок.Laravel: Response :: json с индексом, содержащим html

Вот мой метод в контроллере, который добавляет новую запись с помощью Красноречивых моделей:

public function add() { 

    $data = Input::only(array(
     'title' 
    )); 

    $validation = Validator::make($data, array(
     'title' => 'required|min:3|alpha_num_spaces' 
    )); 

    if ($validation->fails()) { 

     return Response::json(array(
      'error' => true, 
      'validation' => $validation->messages() 
     )); 

    } 

    $todo = new Todo(); 
    $todo->title = $data['title']; 

    if (!$todo->save()) { 

     return Response::json(array(
      'error' => true, 
      'validation' => array(
       'title' => 'Record could not be added' 
      ) 
     )); 

    } 

    $row = View::make('partials.row', array('todo' => $todo)); 

    return Response::json(array(
     'error' => false, 
     'append' => $row 
    )); 

} 

Когда все проверяется и запись добавлена ​​в базу данных, последний Response::json возвращается:

{"error":false,"append":{}} 

Wheres когда Я просто вернусь View::make('partials.row', array('todo' => $todo)); Я получаю ожидаемый результат, который представляет собой строку таблицы с новой записью:

<tr data-id="17"> 
    <td> 
     test 8 
    </td> 
    <td> 
     <a href="#" class="edit">Edit</a> 
    </td> 
    <td> 
     <a href="#" class="delete">Delete</a> 
    </td> 
</tr> 

Есть ли конфликт с Response::json и html-контентом?

+0

Вы можете убедиться, что '$ row' является строкой с' var_dump() '? – Sam

+0

var_dump возвращает весь объект, поэтому не уверен, как преобразовать ответ объекта View в строку? –

+1

Только что нашел сообщение [laravel 4 view to string] (http://www.stillat.com/blog/2013/10/31/laravel-4-rendering-a-view-to-a-string/) - это просто прикованный метод -> render() –

ответ

2

Решение, как представляется, использование метода render():

$row = View::make('partials.row', array('todo' => $todo))->render();