Laravel отображает / возвращает данные в формате json вместо отображения / возврата данных в формате html

#html #json #laravel #dataformat

#HTML #json #laravel #dataformat

Вопрос:

у меня странная ситуация, в которой данные отображаются в формате json вместо html!! На маршруте http://127.0.0.1:8000/addpost отображается форма для добавления записи и недавно добавленная запись.

Он показывает форму для добавления записи, и при нажатии кнопки отправки он возвращает данные в формате json вместо отображения формы и добавленной записи. 1) почему он возвращает данные в формате json? 2) как мне отобразить данные в формате html? это мой маршрут

 web.php
Route::get('addpost','PostController@index');
Route::post('addpost','PostController@store');
  

Контроллер ->

 PostController.php 
class PostController extends Controller
{
     public function index()
    {
        $posts = Post::latest()->first();
        return view('addpost',compact('posts'));

    }

    public function store(Request $request)
    {
        $post =new Post();
        $post->title=   $request->input('title');
        $post->body=    $request->input('body');

        if($request->hasfile('postimage'))
        {
            $file=$request->file('postimage');
            $extention=$file->getClientOriginalExtension();
            $filename=time().'.'.$extention;
            $file->move('uploads/post',$filename);
            $post->postimage=$filename;
        }
        else{
            return $request;
            $post->postimage='';
        }

        $post->save();
        return back()->with('success', 'Your images has been successfully Upload'); 
    }

   }
  

и представление

 <div class="container">
        <div class="jumbotron">
            @if(Auth::user())
            <h3> Add new post with images</h3>
            <form action="{{url('addpost')}}" method="POST" enctype="multipart/form-data">
                {{csrf_field()}}
            <div class="form-group">
                <label>Title</label>
                <input type="text" name="title" class="form-control" >
            </div>
            <div class="form-group">
                <label>Body</label>
                <input type="text" name="body" class="form-control" >
            </div>
            <div class="input-group">
                <div class="custom-file">
                    <input type="file" name="image" class="custom-file-input">
                    <label class="custom-file-label">Choose file</label>

                </div>
            </div>
            <button type="submit" name="submit" class="btn-brn-primary"> Save Post</button>
            @if($posts)
            @foreach($posts as $post)
             <tr>
                        <td>{{$post->id}}</td>
                        <td>{{$post->title}}</td>
                        <td>{{$post->body}}</td>
                        <!-- <td><img src="{{asset('uploads/post/'.$post->image)}}" style="height: 150px;"></td>
                        <td><a href="">EDIT</a></td> -->
                    </tr>
            @endforeach
            @endif
            @else
            <h1>no</h1> 
            @endif 
        </form>
        </div>  
    </div>
  

Ответ №1:

 if($request->hasfile('postimage')) // -> you are checking for postimage, in your html 
                                   // markup the file filed is called "image", 
                                   // therefore you will never enter this if block
        {
            $file=$request->file('postimage');
            $extention=$file->getClientOriginalExtension();
            $filename=time().'.'.$extention;
            $file->move('uploads/post',$filename);
            $post->postimage=$filename;
        }
        else{
            return $request; // here you are returning the $request object that 
                             // causes your unformatted response
            $post->postimage='';
        }