RoutesRequests.php中的流明NotFoundHttpException

时间:2017-07-24 23:26:38

标签: php lumen

我知道在here之前已经问过这个问题。 (请在投票之前粘贴链接,在重复的标签下关闭它。)但是没有一个解决方案对我有效。

我可以毫无错误地访问/。但是当我尝试使用get请求登录时,我收到此错误:

NotFoundHttpException
in RoutesRequests.php (line 594)
at Application->handleDispatcherResponse(array(0))
in RoutesRequests.php (line 532)
at Application->Laravel\Lumen\Concerns\{closure}()
in RoutesRequests.php (line 781)
at Application->sendThroughPipeline(array(), object(Closure))
in RoutesRequests.php (line 534)
at Application->dispatch(null)
in RoutesRequests.php (line 475)
at Application->run()
in index.php (line 28)

index.php (line 28)指向$app->run();

以下是登录表单页面的代码:

<!DOCTYPE html>
<html>
    <head>
    <title>notes!</title>
    <!-- <link rel="stylesheet" type="text/css" href="{{ url('../assets/css/main.css') }}"> -->
    <style>
            body {
            background-color: #ffffff;
        }

        .banner {
            margin: 100px auto;
            text-align: center;
            vertical-align: middle;
            font-family: 'Open Sans', sans-serif;
            font-size: 30px;
            color: #333333;
        }

        .loginContainer {
            width:30%;
            margin: 50px auto;
            vertical-align: middle;
            background-color: #333333;
            border:2px;
            border-radius:10px;
        }

        form {
            margin: 0 auto;
            padding: 50px;
        }

        form input {
            display: block;
            width: 300px;
            margin: 0 auto;
            margin-top: 5px;
            padding: 5px;
            font-size: 30px;
        }

        form button {
            display: block;
            width: 314px;
            margin: 0 auto;
            margin-top: 5px;
            padding: 5px;
            border-radius: 5px;
            border: none;
            background-color: #3366ff;
            color: #ffffff;
            font-size: 30px;
        }
    </style>
    <link href="https://fonts.googleapis.com/css?family=Open+Sans" rel="stylesheet">
    </head>
    <body>
    <!-- <div class="navbar">
         <ul>
         <li>Login</li>
         <li>About Me!</li>
         </ul>
         </div> -->
    <div class="banner">
        <h1>Welcome to notes!</h1>
        <h4>Add notes, to-do lists and more!</h4>
    </div>
    <div class="loginContainer">
        <form class="signin" method="get" action="/login/">
        <input type="email" id="inputEmail" placeholder="Email" required="" autofocus="">
        <input type="password" id="inputPassword" placeholder="Password" required="">
        <button type="submit">Sign in</button>
        </form>
    </div>
    </body>
</html>

以下是routes.php的代码:

<?php

/*
|--------------------------------------------------------------------------
| Application Routes
|--------------------------------------------------------------------------
|
| Here is where you can register all of the routes for an application.
| It is a breeze. Simply tell Lumen the URIs it should respond to
| and give it the Closure to call when that URI is requested.
|
*/

$app->get('/', function () use ($app) {
    return view('welcome');
});

$app->get('login/','UsersController@authenticate');
$app->post('todo/','TodoController@store');
$app->get('todo/', 'TodoController@index');
$app->get('todo/{id}/', 'TodoController@show');
$app->put('todo/{id}/', 'TodoController@update');
$app->delete('todo/{id}/', 'TodoController@destroy');

?>

以下是UsersController.php文件:

<?php

namespace App\Http\Controllers;

use App\Http\Controllers\Controller;

use Illuminate\Support\Facades\Hash;

use Illuminate\Http\Request;

use App\Users;

class UsersController extends Controller

{

  public function __construct()

   {

//        $this->middleware('auth:api');

   }

   /**
    * Display a listing of the resource.
    *
    * @return \Illuminate\Http\Response
    */

   public function authenticate(Request $request)

   {

       $this->validate($request, [

       'email' => 'required',

       'password' => 'required'

        ]);

      $user = Users::where('email', $request->input('email'))->first();

     if(Hash::check($request->input('password'), $user->password)){

          $apikey = base64_encode(str_random(40));

          Users::where('email', $request->input('email'))->update(['api_key' => "$apikey"]);;

          return response()->json(['status' => 'success','api_key' => $apikey]);

      }else{

          return response()->json(['status' => 'fail'],401);

      }

   }

}    

?>

3 个答案:

答案 0 :(得分:3)

路线第一个参数用'/'

修剪

修复表单操作: / login / - &gt; /登录

<form class="signin" method="get" action="/login">

答案 1 :(得分:1)

那是因为action属性中的反斜杠,但这里有一些要考虑的因素:

首先我不知道你为什么要使用GET请求登录表单,因为您发送到服务器的凭据将显示在用户的网址中。浏览器和这种信息应该是安全的,特别是密码 - 另一件事是为什么不使用blade引擎让你的观点更优雅但是没关系我们可以使用本机php语法。

  • 要获得/login路线的正确路径,我们将使用url

  • 然后我们将方法更改为post,这非常适合我们想要实现的目标:将数据发送到我们的服务器而不显示在用户的浏览器中,这样我们的表单看起来就像这样:

    <form class="signin" method="post" action="<?=url('/login');?>"> <input type="email" id="inputEmail" name="email" placeholder="Email"> <input type="password" id="inputPassword" name="password" placeholder="Password"> </form>

  • 另外我添加了name属性,这在检索表单值时非常重要。

  • 我们也会在post中使用routes/web.php方法,如下所示:

    $app->post('/login','UsersController@authenticate');

答案 2 :(得分:-1)

我认为您.htaccess文件丢失,在公共目录中添加。htaccess文件,并为apache分配读取权限:

<IfModule mod_rewrite.c>
    <IfModule mod_negotiation.c>
        Options -MultiViews
    </IfModule>

    RewriteEngine On

    # Redirect Trailing Slashes If Not A Folder...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule ^(.*)/$ /$1 [L,R=301]

    # Handle Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>