【问题标题】:Laravel redirects post to localhostLaravel 将帖子重定向到 localhost
【发布时间】:2016-06-30 15:56:54
【问题描述】:

我正在使用 Laravel 5 并从 Laravel 网站开始快速入门。 如果我使用代码中的 post 函数,它会重定向到 localhost/LOCATION 而不是 localhost/PROJECT/public/LOCATION。

它可能在我的配置中,但我不知道它是什么。

这是来自我的路由器的代码,它似乎是发布任务功能中的问题。

<?php

use App\Task;
use Illuminate\Http\Request;

Route::group(['middleware' => ['web']], function () {
    /**
     * Show Task Dashboard
     */
    Route::get('/', function () {
        return view('tasks', [
            'tasks' => Task::orderBy('created_at', 'asc')->get()
        ]);
    });

    /**
     * Add New Task
     */
    Route::post('/task', function (Request $request) {
        $validator = Validator::make($request->all(), [
            'name' => 'required|max:255',
        ]);

        if ($validator->fails()) {
            return redirect('/')
                ->withInput()
                ->withErrors($validator);
        }

        $task = new Task;
        $task->name = $request->name;
        $task->save();

        return redirect('/');
    });

    /**
     * Delete Task
     */
    Route::delete('/task/{id}', function ($id) {
        Task::findOrFail($id)->delete();

        return redirect('/');
    });
});

使用此代码我发布到路线

<form action="/task" method="POST" class="form-horizontal">
    {{ csrf_field() }}

    <!-- Task Name -->
    <div class="form-group">
        <label for="task-name" class="col-sm-3 control-label">Task</label>

        <div class="col-sm-6">
            <input type="text" name="name" id="task-name" class="form-control" value="{{ old('task') }}">
        </div>
    </div>

    <!-- Add Task Button -->
    <div class="form-group">
        <div class="col-sm-offset-3 col-sm-6">
            <button type="submit" class="btn btn-default">
                <i class="fa fa-btn fa-plus"></i>Add Task
            </button>
        </div>
    </div>
</form>

更新 如果我将表单操作更改为“/quickstart/public/task”,它可以工作,但如果我没记错,/task 应该在 laravel 中自动重定向到它

【问题讨论】:

  • 您是如何使用表单中的 post 功能的?如果是这样,请发布表单的代码
  • 是的,从表格中我把它放在那里了,谢谢

标签: php laravel routing


【解决方案1】:

你可以使用 laravel 辅助函数。更多https://laravel.com/docs/5.2/helpers#urls

我的建议是你使用 url() 之类的

<form action = "{{ url('task') }}">

【讨论】:

    【解决方案2】:

    您可以命名您的路线(查看https://laravel.com/docs/5.2/routing#named-routes

    并在您的表单操作中调用它

    <form action = "{{ route('name_of_my_route') }}"
    

    【讨论】:

    • 这正是我要做的
    【解决方案3】:

    您的网络服务器配置错误。您应该将public 目录设置为根目录。

    localhost/PROJECT/public/LOCATION 是错误地址,localhost/LOCATION 是正确地址。

    例如,如果您使用的是 Apache:

    <VirtualHost *:80>
      ServerName myapp.localhost.com
      DocumentRoot "/home/vagrant/projects/myapp/public"
      <Directory "/home/vagrant/projects/myapp/public">
        AllowOverride all
      </Directory>
    </VirtualHost>
    

    【讨论】:

    • 再次嘿嘿 :) 你怎么知道他在使用 apache?也许下次可以使用评论看看他正在使用什么技术,然后你就可以形成你的答案。
    • @haakym,我的回答很统一,它说明了问题出在哪里以及如何解决。我给出 Apache 代码只是作为一个例子。我可以删除 Apache 代码,我的回答仍然会回答这个问题。为什么我发布了 Apache 代码作为示例?因为世界上大多数服务器都使用 Apache 作为 Web 服务器软件。
    • 我不认为这是我之前(一年前)使用过 Laravel 的问题,我不记得这样做了,我认为这是 Laravel 配置,但我找不到它
    • 肯定是有问题的,你这样用的话,到处都是404和500的错误。
    猜你喜欢
    • 2019-12-12
    • 2017-10-05
    • 2017-03-14
    • 1970-01-01
    • 1970-01-01
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 2021-01-05
    相关资源
    最近更新 更多