Laravel 创建新路由时出现 404 错误

Laravel getting 404 error when creating new route

看起来,当我创建一个新路由时,我在尝试访问 url 时收到 404 错误,这很有趣。因为我所有的其他路线都工作得很好。

我的 web.php 看起来像这样:

Auth::routes();

Route::post('follow/{user}', 'FollowsController@store');

Route::get('/acasa', 'HomeController@index')->name('acasa');
Route::get('/{user}', 'ProfilesController@index')->name('profil');
Route::get('/profil/{user}/edit', 'ProfilesController@edit')->name('editareprofil');
Route::patch('/profil/{user}', 'ProfilesController@update')->name('updateprofil');

Route::get('/alerte', 'PaginaAlerte@index')->name('alerte');
Route::get('/alerte/url/{user}', 'UrlsController@index')->name('editurl');
Route::post('/alerte/url/{user}', 'UrlsController@store')->name('updateurl');
Route::get('/alerte/url/{del_id}/delete','UrlsController@destroy')->name('deleteurl');

我访问 http://127.0.0.1:8000/alerte 时不工作的是:

Route::get('/alerte', 'PaginaAlerte@index')->name('alerte');

控制器看起来像这样:

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use Auth;

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

    public function index(User $user)
    {
        return view('alerte');
    }
}

我正在摸索,因为我看不出问题出在哪里。它还不是一个在线网站,我正在使用 WAMP 在我的 Windows 10 台电脑上开发。

以下路线也捕获 url /alerte

Route::get('/{user}', 'ProfilesController@index')->name('profil');

因为这个是在

之前指定的
Route::get('/alerte', 'PaginaAlerte@index')->name('alerte');

/alerte 将改为 ProfilesController

要解决此问题,请更改 url 定义的顺序或更改 url 中的任何一个以进行嵌套,例如/alerte/home/user/{user}

将我的评论移至稍微解释一下的答案。

因此,在您的路线集合中,您有两条相互冲突的路线

Route::get('/{user}', 'ProfilesController@index')->name('profil');

Route::get('/alerte', 'PaginaAlerte@index')->name('alerte');

假设 Laravel 正在从上到下读取所有路由,并在第一次匹配后停止读取下一个路由。

在你的情况下,Laravel 认为 alerte 是一个用户名并转到 ProfilesController@index 控制器。然后它会尝试查找具有 alerte 用户名的用户并返回 404,因为目前您还没有具有此用户名的用户。

所以为了修复404错误和处理/alerte路由,你只需要将相应的路由移动到/{username}之前。

但这就是您现在遇到的困境。如果您将拥有一个用户名为 alerte 的用户怎么办?在这种情况下,用户看不到他的个人资料页面,因为现在 alerte 正在通过另一条路线处理。

我建议为您的项目使用更友好的 URL 结构。像 /user/{username} 来处理用户的一些操作,并仍然使用 /alerte 来处理警报路由。

我想建议你声明你的 URL 没有“/”,就像你的第一个 "post" 路线一样,因为有时,我遇到了这种错误 (404)。

所以,我的第一个建议是更改路由声明。之后,您应该测试您的中间件,尝试不使用该构造,然后重试。

祝你好运!

嗯。 也许这为时已晚,但我整个星期都在处理这个问题。 我制作了自己的 custom.php 文件并将其添加到我的 Laravel 项目的路由路径中,并且 none 的路由完全有效。

我是这样解决的:

  • 您必须记得编辑位于 app\Providers 路径中的 RouteServiceProvider.php 文件。在 map() 函数中,您必须添加 .php 文件。 那应该没问题!

为避免意外行为,首先映射您的自定义路由。如果没有满足任何预期的路线规则,一些基于 Laravel 的系统可以“停止”处理路线。我遇到了那个问题,快把我逼疯了!