【问题标题】:MethodNotAllowedHttpException Laravel 5.4MethodNotAllowedHttpException Laravel 5.4
【发布时间】:2017-12-21 00:25:18
【问题描述】:

我现在开始使用 Laravel

我在尝试从经过身份验证的用户添加新用户时收到 MethodNotAllowedHttpException。

这是输入表单(add.blade.php)

 <form method="POST" action="{{ action('Backend\UserController@store') }}">

  {{csrf_field()}}


  <div class="form-group">
    <label for="first_name">First Name:</label>
    <input id="first_name" type="text" class="form-control" name="first_name" value="{{ old('first_name') }}" placeholder="Your Name" required>
    <!--<input type="text" class="form-control" id="name" name="name"> -->
  </div>

   <div class="form-group">
    <label for="last_name">Last Name:</label>
    <input id="last_name" type="text" class="form-control" name="last_name" value="{{ old('first_name') }}" placeholder="Your Surname" required>
    <!--<input type="text" class="form-control" id="name" name="name"> -->
  </div>

  <div class="form-group">
    <label for="email">E-Mail:</label>
    <input id="email" type="text" class="form-control" name="email" value="{{ old('email') }}" placeholder="Your Email" required>
    <!--<input type="email" class="form-control" id="email" name="email">-->
  </div>

  <div class="form-group">
    <label for="password">Password:</label>
    <input id="password" type="password" class="form-control" name="password" placeholder="Your Password" required>
    <!--<input type="password" class="form-control" id="password" name="password">-->
  </div>


  <div class="form-group">
    <button type="submit" class="btn btn-primary">Register</button>
  </div>

  @include ('layouts.errors')

</form>

这是用户控制器(UserController.php),请检查存储方法

<?php

namespace App\Http\Controllers\Backend;

use App\Http\Controllers\Controller;
use App\User;
use Illuminate\Http\Request;
use Illuminate\Support\Str;

class UserController extends Controller {
    public function __construct() {
        $this->middleware('auth');

    }

    public function getIndex() {
        $users = User::orderBy('created_at', 'DESC')->paginate(10);
        return view('backend.user.list', compact('users'));
    }

    public function getAdd() {
        // schermata di aggiunta del nuovo autore
        return view('backend.user.add');
    }

    public function store(Request $request) {
        // elaborazione dei dati ed effettiva aggiunta dell'autore

        $this->validate(request(), [

            'first_name' => 'required',
            'last_name' => 'required',
            'email' => 'required|email|unique:users',
            'password' => 'required|confirmed',

        ]);

        //Create and Save the Users
        $first_name = $request->first_name;
        $last_name = $request->last_name;
        $email = $request->email;
        $password = $request->password;
        $slug = Str::slug($first_name . $last_name);

        $user = User::create([
            'first_name' => $first_name,
            'last_name' => $last_name,
            'email' => $email,
            'slug' => $slug,
            'password' => bcrypt($password),

        ]);

        return redirect('backend/indexuser');

    }

    public function getDelete($userId, Request $request) {
        $userToDelete = User::find($userId);
        $userToDelete->delete();
        //$userId->delete();

        $request->session()->flash('success_message', 'User Deleted');
        return redirect('backend/indexuser');
    }
}

这是路线(web.php)

Route::get('backend/indexuser', 'Backend\UserController@getIndex');
Route::get('backend/adduser', 'Backend\UserController@getAdd');
Route::post('backend/adduser', 'Backend\UserController@store');
Route::get('backend/indexuser/delete/{id}', 'Backend\UserController@getDelete');

在用户注册后,我被重定向到 http://192.168.33.10/myBlog/public/logout 并出现 MethodNotAllowedHttpException 屏幕

这是 php 工匠路线:列表

+--------+----------+-------------------------------+------+------------------------------------------------------------+--------------+
| Domain | Method   | URI                           | Name | Action                                                     | Middleware   |
+--------+----------+-------------------------------+------+------------------------------------------------------------+--------------+
|        | GET|HEAD | /                             |      | App\Http\Controllers\FrontendController@getIndex           | web          |
|        | GET|HEAD | api/user                      |      | Closure                                                    | api,auth:api |
|        | GET|HEAD | articolo/{slug}               |      | App\Http\Controllers\FrontendController@getArticolo        | web          |
|        | GET|HEAD | autore/{slug}                 |      | App\Http\Controllers\FrontendController@getAutore          | web          |
|        | GET|HEAD | backend/adduser               |      | App\Http\Controllers\Backend\UserController@getAdd         | web,auth     |
|        | POST     | backend/adduser               |      | App\Http\Controllers\Backend\UserController@store          | web,auth     |
|        | GET|HEAD | backend/indexuser             |      | App\Http\Controllers\Backend\UserController@getIndex       | web,auth     |
|        | GET|HEAD | backend/indexuser/delete/{id} |      | App\Http\Controllers\Backend\UserController@getDelete      | web,auth     |
|        | GET|HEAD | categoria/{slug}              |      | App\Http\Controllers\FrontendController@getCategoria       | web          |
|        | GET|HEAD | dashboard                     |      | App\Http\Controllers\Backend\SessionsController@getIndex   | web,auth     |
|        | GET|HEAD | login                         | home | App\Http\Controllers\Backend\SessionsController@create     | web,guest    |
|        | POST     | login                         |      | App\Http\Controllers\Backend\SessionsController@store      | web,guest    |
|        | GET|HEAD | logout                        |      | App\Http\Controllers\Backend\SessionsController@destroy    | web,auth     |
|        | GET|HEAD | register                      |      | App\Http\Controllers\Backend\RegistrationController@create | web          |
|        | POST     | register                      |      | App\Http\Controllers\Backend\RegistrationController@store  | web   

怎么了? 谢谢

\\\\\\\\\\\\\\\\ 更新 1 //////////////////////////

检查了我呈现的 HTML。

 <form method="POST" action="http://192.168.33.10/myBlog/public/backend/adduser">

          <input type="hidden" name="_token" value="cWbRF1A7UWEzPWqtmVhVocbzQdkwKgc8dABne28v">


          <div class="form-group">
            <label for="first_name">First Name:</label>
            <input id="first_name" type="text" class="form-control" name="first_name" value="" placeholder="Your Name" required>
            <!--<input type="text" class="form-control" id="name" name="name"> -->
          </div>

这是我在中间件文件夹中的 RedirectIfAuthenticated.php

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Support\Facades\Auth;

class RedirectIfAuthenticated {
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @param  string|null  $guard
     * @return mixed
     */
    public function handle($request, Closure $next, $guard = null) {
    if (Auth::guard($guard)->check()) {

        return redirect('dashboard');

    }

    return $next($request);
  }
}

这是 Handler.php 中未经身份验证的方法

        protected function unauthenticated($request, AuthenticationException $exception) {
            if ($request->expectsJson()) {
                return response()->json(['error' => 'Unauthenticated.'], 401);
            }

            //return redirect()->guest(route('login'));
            //redirect se l'utente prova ad accedere da guest, reindirizzo a login
            return redirect()->home();
        }
    }

在 /storage/logs/laravel.log 最后我找不到任何有趣的东西, 这是最后几行

#47 /var/www/public/myBlog/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(148): Illuminate\Foundation\Http\Middleware\CheckForMaintenanceMode->handle(Object(Illuminate\Http\Request), Object(Closure))
#48 /var/www/public/myBlog/vendor/laravel/framework/src/Illuminate/Routing/Pipeline.php(53): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}(Object(Illuminate\Http\Request))
#49 /var/www/public/myBlog/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(102): Illuminate\Routing\Pipeline->Illuminate\Routing\{closure}(Object(Illuminate\Http\Request))
#50 /var/www/public/myBlog/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(151): Illuminate\Pipeline\Pipeline->then(Object(Closure))
#51 /var/www/public/myBlog/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(116): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter(Object(Illuminate\Http\Request))
#52 /var/www/public/myBlog/public/index.php(53): Illuminate\Foundation\Http\Kernel->handle(Object(Illuminate\Http\Request))
#53 {main}  

\\\\\\\\ 更新 2 ///////////////////////////

Log From storage/logs/laravel.log

【问题讨论】:

  • 表格中的数据输入完成了吗?
  • 您确定要发帖到/backend/adduseruri 吗?我认为您的 action('Backend\UserController@store sn-p 没有返回预期的 uri。
  • 你在 User 模型的 $fillable 数组中添加了 slug 字段吗?
  • @KooroshPasokhi 是的,我有:protected $fillable = [ 'first_name', 'last_name', 'slug', 'email', 'password', ];
  • @piotr 在用名字、姓氏、电子邮件和密码填写表格后,没有创建用户,我被重定向到公共/注销,我不知道为什么。

标签: php laravel exception routing


【解决方案1】:

将注销方式从 Get 切换到 Post,然后我将表单操作从 Navbar(主布局页面)移动到 Dashboard 页面,现在问题解决了

    <p>Benvenuto {{ Auth::user()->first_name }} ! Scegli cosa vuoi fare usando il menu qui in alto.</p>

    <form action="{{ action('Backend\SessionsController@destroy') }}" method="POST" accept-charset="utf-8">
        <input type="hidden" name="_token" value="{{ csrf_token() }}">
            <div class="form-group">
                <button type="submit" class="btn btn-danger">Log Out</button>
            </div>
    </form>

@endsection

主布局刀片出现问题。当我尝试使用“Backend\UserController@store”操作创建新用户时,也会调用注销操作。 我无法弄清楚,但现在我解决了它用仪表板页面中的按钮替换“导航栏注销”。

问候

【讨论】:

    【解决方案2】:

    第一: 检查您呈现的 HTML。我认为您的表单的action 部分呈现了一些奇怪的东西。

    如果问题仍然存在 检查您是否有未触及的auth 中间件

    如果问题仍然存在 检查您的日志 (/storage/logs/laravel.log) 并与我们分享。

    【讨论】:

    • 你好@piotr 提前谢谢。请检查主帖中的更新 1。
    【解决方案3】:

    为什么不直接使用 url() 函数?

    <form method="POST" action="{{ url('backend/adduser') }}">
    

    【讨论】:

      猜你喜欢
      • 2018-02-28
      • 1970-01-01
      • 1970-01-01
      • 2017-08-03
      • 2018-04-13
      • 1970-01-01
      • 2018-05-28
      • 2018-07-19
      • 1970-01-01
      相关资源
      最近更新 更多