Laravel 5路由对象未找到

6

我往往使用Laravel 4,现在我正在尝试学习Laravel 5。

控制器路由的命名存在问题:

我有这样的路由:

Route::get('/', [
    'uses' => 'HomeController@viewHome', 
    'as' => 'home'
]);

Route::get('/events', [
        'uses' => 'EventController@viewEvent', 
        'as' => 'event'
    ]);

当我运行路由为'home' (localhost/laravel/)时,它能够完美地工作。
但是当我运行路由为'event' (localhost/laravel/events)时,会出现“对象未找到!”的错误。 enter image description here 我已经确保viewEvent方法可以正确运行,就像这样进行交换:
Route::get('/', [
    'uses' => 'EventController@viewEvent', 
    'as' => 'home'
]);

Route::get('/events', [
        'uses' => 'HomeController@viewHome', 
        'as' => 'event'
    ]);

我可以运行viewEvent,但无法运行viewHome。

我的代码有问题吗?

======================== 已解决 =============================

在@DamienPirzy的帮助下,我意识到当我禁用/public/文件夹时,我认为我必须将.htaccess移到主文件夹外 :)

感谢大家快速回应 :) 问题已解决


(localhost/laravel/event) 但是你的路由声明为 "events",复数形式。 - Damien Pirsy
只是一个打字错误,我在 localhost/laravel/events 上运行它 @DamienPirsy - GandhyOnly
1
您的 .htaccess 文件设置正确了吗?如果您访问 laravel/index.php/events,它是否可以正常工作? - Damien Pirsy
@DamienPirsy 哇,它能工作,但我该如何修复它? - GandhyOnly
@DamienPirsy 我已经解决了,谢谢 :) - GandhyOnly
7个回答

6

将此htaccess文件放置在公共文件夹中。确保您的Apache mod_rewrite模块正常工作。

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

    RewriteEngine On

    # Redirect Trailing Slashes...
    RewriteRule ^(.*)/$ /$1 [L,R=301]

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

尝试在这段代码中添加重写规则,但是出现了“找不到对象”的错误。https://stackoverflow.com/questions/57783056/https-laravel-using-htaccess-public - Pablo

2

我在routes.php文件中看到了这个。

Route::get('/events', [
        'uses' => 'EventController@viewEvent', 
        'as' => 'event'
    ]);

但是你运行

localhost/laravel/event  

应该运行

localhost/laravel/events

只是个打字错误,我在本地主机上运行它,使用的是localhost/laravel/events。 - GandhyOnly
1
尝试添加这个 @GandhyOnly Route::get('/events', 'EventController@viewEvent'); - Kornkrit Leelhaphunt

2

你能检查一下 .htaccess 文件吗?因为屏幕上的错误来自 Apache,请求没有进入 Laravel 应用程序。

或者检查 mod_rewrite 是否已启用?


太棒了!我遇到了同样的问题,试图解决了一个小时,你救了我的命。 - GaLaBoOnZ

1

将public文件夹中的htaccess文件复制并粘贴到根目录中。这应该可以解决问题,还要检查所有路由的拼写是否正确。


0
尝试将 .htaccess 文件更改为以下内容。
<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]
</IfModule>

0

试一下

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

    RewriteEngine On

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

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

    # Send Requests To Front Controller...
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^ index.php [L]
</IfModule>

0

在项目名称后添加index.php,例如localhost/cms/index.php/ 这样做可以使您的所有路由正常工作


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接