Laravel Why my image post function doesn't work correctly?

Takamasa Yoshizawa :

Basic Information

I'm developing a simple Web Application using Laravel6.0.
I made an image post function but it doesn't work correctly.
There are no error messages.

Problem

I can't post an Image.
Nothing changed.
It just transit to same page.
create2.blade.php is form to post the image and i want to view this image on index2.blade.php

Codes

routes/web.php

<?php

/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| Here is where you can register web routes for your application. These
| routes are loaded by the RouteServiceProvider within a group which
| contains the "web" middleware group. Now create something great!
|
*/

Route::get('login');

Route::group(['middleweare' => 'auth'], function () {
    Route::get('/', 'StoriesController@index');
    Route::post('/', 'StoriesController@index');
    Route::post('/stories/create', 'StoriesController@upload');
    Route::get('/stories/create', 'StoriesController@add');
    Route::post('/stories/create', 'StoriesController@add');
});

Route::group(['middleweare' => 'auth','name'=>'profile'], function () {
    Route::get('/profile/edit', 'ProfileController@edit');
    Route::get('/profile/create', 'ProfileController@add');
    Route::post('/profile/create', 'ProfileController@add');
    Route::post('/profile/create', 'ProfileController@store');
    Route::post('/profile/create', 'ProfileController@upload');
});

Route::get('/home', 'HomeController@index')->name('home');

Auth::routes();


app/Http/Controllers/StoriesController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use App\Story;
use Auth;
use App\Posts;
use App\History;
use App\Attachment;
use Carbon\Carbon;
use Storage;

class StoriesController extends Controller
{

  public function __construct()
    {
      $this->middleware('auth');
    }

  public function index(Request $request)
      {
        $images = Attachment::all();

        return view('stories.index2', compact('images'));
      }

  public function add()
    {
      return view('stories.create2');
    }


  public function store(Request $request)
  {

    $d = new \DateTime();
    $d->setTimeZone(new \DateTimeZone('Asia/Tokyo'));
    $dir = $d->format('Y/m');
    $path = sprintf('public/images/%s', $dir);


    $data = $request->except('_token');

    foreach ($data['images'] as $k => $v) {

      $filename = '';


      $attachments = Attachment::take(1)->orderBy('id', 'desc')->get();

      foreach ($attachments as $attachment) {

        $filename = $attachment->id + 1 . '_' . $v->getClientOriginalName();
      }
      unset($attachment);

      if ($filename == false) {
        $filename = 1 . '_' . $v->getClientOriginalName();
      }

      $v->storeAs($path, $filename);

      $attachment_data = [
        'path' => sprintf('images/%s/', $dir),
        'name' => $filename
      ];

      $a = new Attachment();
      $a->fill($attachment_data)->save();
    }

    unset($k, $v);

    return redirect('/');
  }


  public function upload(Request $request)
    {
      dd($request->all());
      $this->validate($request, [
        'file' => [
          'required',
          'file',
          'image',
          'mimes:jpeg,png',
        ]
      ]);

      if ($request->file('file')->isValid([])) {
        $path = $request->file->store('public');
        return view('stories.index2')->with('filename', basename($path));
      } else {
        return redirect('/')
          ->back()
          ->withInput()
          ->withErrors();
      }
    }
}

resources/views/stories/create2.blade.php

@extends('layouts.front2')
@section('title','StoryCreate')

@section('content')
<link href="{{ asset('/css/main22.css' )}}" rel="stylesheet">

<div class="poststory">
    <h1>Post Story</h1>
</div>
@if ($errors->any())
<ul>
    @foreach($errors->all() as $error)
    <li>{{ $error }}</li>
    @endforeach
</ul>
@endif
<form action="{{ url('/') }}" method="POST" enctype="multipart/form-data">

    <div class="form">
        <label for="photo" class="file">Choose Image or Video</label>
        <div class="post">
            <input type="file" class="here" name="images[]">

        </div>
    </div>
    <br>
    </div>

    {{ csrf_field() }}
    <div class="post">
        <div class="btn postbtn">
            <input type="submit" value="post" />
        </div>
    </div>
</form>

@endsection

resources/views/stories/index2.blade.php

@extends('layouts.front2')
@section('title','mainpage')

@section('content')
<div class="profile">

    <div class="profileimg">
        @foreach ($images as $image)
        <img src="/storage/{{ $image->path . $image->name }}" style="height: 210px; width: 210px; border-radius: 50%;">
        @endforeach
    </div>

    <div class="name">
        @guest
        <a class="nav-link2" href="{{ route('register')}}">{{ __('Create Accout!')}}</a>
        @else
        <a id="navbarDropdown" class="nav-link2" href="#" role="button">
            {{Auth::user()->name}}<span class="caret"></span></a>



        <form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
            @csrf
        </form>
    </div>
    @endguest


    <div class="aboutme">
        You can write your profile here!You can write your profile here!You can write your profile here!
        You can write your profile here!You can write your profile here!You can write your profile here!
        You can write your profile here!You can write your profile here!You can write your profile here!
        You can write your profile here!You can write your profile here!You can write your profile here!
        You can write your profile here!You can write your profile here!You can write your profile here!
    </div>

</div>

<div class="new">

    <div class="newtitle">
        <h1>New</h1>
    </div>

    <div class="container1">

        @foreach ($images as $image)
        <img src="/storage/{{ $image->path . $image->name }}" class="images" style="height: 150px; width: 150px; border-radius: 50%;">
        @endforeach
        <div class="more">
            more...
        </div>
    </div>

</div>

<div class="stories">

    <div class="titlestories">
        <h1>Stories</h1>
    </div>

    <div class="container2">

        <div class="titleclose">
            <h2>#CloseFriends</h2>
        </div>

        @foreach ($images as $image)
        <img src="/storage/{{ $image->path . $image->name }}" class="images" style="height: 150px; width: 150px; border-radius: 50%;">
        @endforeach

        <div class="titlefollow">
            <h2>#Follows</h2>
        </div>


    </div>
</div>

{{ csrf_field() }}
@endsection

sorry for my terrible English but, i need help.
Waiting for your comments and Answers!

James Clark Developer :

You have two definitions for POST /stories/create in your routes file.

   Route::post('/stories/create', 'StoriesController@upload');
   ...
   Route::post('/stories/create', 'StoriesController@add');

The last one processed will be receiving the requests to this route. You should be able to verify this on the command line by running php artisan route:list and looking and which routes are available and which controllers they are mapped to. In this case, you are likely hitting the add method instead of the upload method.

As an immediate fix, remove the second definition from routes file, rerun php artisan route:list to look for the change, and see if the webpage behaves differently.

It looks like you will face a similar problem with:

  Route::post('/profile/create', 'ProfileController@add');
  Route::post('/profile/create', 'ProfileController@store');
  Route::post('/profile/create', 'ProfileController@upload');

Resourceful routing can help standardize routing and save a lot of headaches and confusion like this. https://laravel.com/docs/6.x/controllers#resource-controllers

In particular, if you define your routes as described at https://laravel.com/docs/6.x/controllers#restful-partial-resource-routes, you can use php artisan route:list to verify which methods each route is mapped to, and then update your controllers to match.

Route::resource('stories', 'StoriesController')->only([
    'index', 
    'create', 
    'store',
]);

Guess you like

Origin http://43.154.161.224:23101/article/api/json?id=220711&siteId=1