管理控制台在Laravel中使用会话-获取MethodNotAllowedHttpException

时间:2018-10-25 02:54:41

标签: php laravel

我正在尝试使用Laravel中的会话创建一个简单的管理面板。我不打算使用Laravel身份验证。我遇到错误了。我意识到它的发生是由于web.php文件中的get方法,我什至将其更改为post,但仍然无法正常工作。请帮忙,我收到以下错误。 -

  

RouteCollection.php第251行   RouteCollection-> methodNotAllowed(array('GET','HEAD'))在   RouteCollection.php第238行

Login.blade.php -

@php
    session_start();
    echo isset($_SESSION['login']);

    if(isset($_SESSION['login'])) {
        header('LOCATION:dashboard'); die();
    }
@endphp

<html>
<body>
    <h3>Login</h3>

@php
      if(isset($_POST['submit'])){
        $username = $_POST['username']; 
        $password = $_POST['password'];

        if($username === 'admin' && $password === 'password')
        {
            $_SESSION['login'] = true; header('LOCATION:dashboard'); die();

        } else {
            echo "Username and Password do not match";
        }

      }
 @endphp
    <form action="" method="post">

        Username:
        <input type="text"  id="username" name="username" required>


        Password:
        <input type="password" id="pwd" name="password" required>

        <button type="submit" name="submit">Login</button>
    </form>

</body>
</html>

Web.php-

Route::get('/admin', function () {
    return view('admin.login');
});

Route::get('/dashboard', function () {
    return view('admin.dash');
});

Dash.blade.php -

@php
    session_start();
    if(!isset($_SESSION['login'])) {
        header('LOCATION:admin'); die();
    }
@endphp
<!DOCTYPE html>
<html>
<body>
    <h3>Dashboard</h3>
</body>
</html>

3 个答案:

答案 0 :(得分:0)

看起来您正在尝试将视图用于初始获取以及表单提交中的帖子。通常这是一种不好的做法,并且您还在框架之外使用了很多普通的php,不建议这样做。

不过,您可以尝试执行以下操作:

Route::match(['get', 'post'], function () {
    return view('admin.login');
});

答案 1 :(得分:0)

您仅在那儿编写了git方法。您需要添加post方法以及在同一页面上执行这两项操作。

Route::post('/admin', function () {
   return view('admin.login');
});

此外,不建议您执行上述操作,因为您正在Laravel刀片文件中编写代码,但它类似于Core PHP。我建议为此使用控制器。因此,您可以创建另一条路由,并将该数据传递给路由访问控制器,然后在那儿执行操作。

<form action="/admin" method="post">
//your form
</form>

然后在您的路由文件中,将您的路由定向到控制器

Route::post('/admin', 'yourController@yourMethod');

检查此链接 https://laravel.com/docs/5.7/routing

答案 2 :(得分:0)

在Laravel中,使用post方法时必须通过 csrf_token 。 请参阅有关csrf令牌https://laravel.com/docs/5.7/csrf的链接。 在您的视图文件中添加以下代码。

/////In your view file///////

    <form action="/admin" method="post">
    //your form
           {{ csrf_field() }} ///add the csrf_token field
    </form>

/////////////////////

并在Web.php中添加代码

Route::post('/admin', function () {
   return view('admin.login');
});