【问题标题】:Laravel 5.1 - Route doesnt workLaravel 5.1 - 路线不起作用
【发布时间】:2016-10-20 18:05:06
【问题描述】:

我的路线有问题,我有我的路线:

Route::get('dashboard/password', 'UserController@password');

Route::post('dashboard/updatepassword', 'UserController@updatePassword');

// PAGINA UTENTE  PUBBLICA

Route::get('/{username}', 'FrontController@user');


// blog routes

    Route::get('blog', 'FrontController@blog');
    Route::get('blog/{slug}', 'FrontController@article');
    Route::get('blog/category/{name}', 'FrontController@BlogCategory');
    Route::get('blog/tag/{name}', 'FrontController@tags');

    Route::resource('comment', 'CommentController');

还有我的 FrontController:

public function blog()
    {

        $articles = Article::OrderBy('id','DESC')->paginate(3);
        $Allarticles = Article::OrderBy('id','DESC')->get();
        $Allcategories = BlogCategory::OrderBy('id','DESC')->get();
        $Alltags = Tag::OrderBy('id','DESC')->get();
        $Allcomments = Comment::OrderBy('id','DESC')->take(3)->get();

        return view('blog', compact('articles','Alltags','Allarticles','Allcategories','Allcomments'));
    }

如果我转到“http://localhost:8000/blog”,它会返回到我之前所在的页面。类似于 route->back()。

我不知道为什么我会遇到这个问题,其他博客路由都很好。

我做了一些这样的测试:

public function blog()
        {
            return "Hi";

        }

它不返回“Hi”,所以我认为是路线的问题。我这里没有可用的中间件,我的博客/文章等其他路由运行良好。

【问题讨论】:

  • 你的 blog.blade.php 的完整路径是什么?您是否可能用另一条路线覆盖该路线?尝试将您的路线放在您的 routes.php 的最顶部
  • views/blog.blade.php 这是完整路径,我没有使用文件夹,我不知道为什么但不起作用。如果我要去一条不存在的路线,我也会遇到同样的问题。
  • 问题是:Route::get('/{username}', 'FrontController@user');我删除了,它可以工作

标签: php laravel laravel-5.1


【解决方案1】:

您可以发布您的路线文件的内容吗? 如果'blog' 的任何路由高于您发布的包含参数的路由(例如Route::get('blog/{blog_post_id}, ...),请尝试将它们移至文件中的'blog' 下方。

如果不是上述情况,那么听起来可能有一些缓存在玩弄乱七八糟的东西,当我运行优化以查看生产环境将如何执行时,它通常会抓住我而我忘记了清除所有缓存,这是我通常的修复(我有别名,因为我经常把它搞砸);

php artisan route:clear
php artisan view:clear
php artisan cache:clear (Side note, clears all auth sessions, will require a re-log)
composer dump-autoload
php artisan optimize --force

这将完全清除为路由、视图和授权创建的所有缓存。

同时检查你的 Laravel 日志和你的 Apache/NginX 日志,总是值得一看的

【讨论】:

  • 谢谢,Routes 文件看起来不错,尝试运行这些命令来清除所有缓存,看看是否有帮助。您也可以尝试重新启动 Apache/NginX + MySQL 服务
  • 如果我转到不存在的“localhost:8000/blog25”,返回同样的问题,返回我所在的页面。
  • 问题是:Route::get('/{username}', 'FrontController@user');我删除了,它可以工作
【解决方案2】:

您的问题是路由文件中的模式匹配。似乎 Routes 被分配给与 URI 匹配的第一个路由。

Route::get('/{username}', 'FrontController@user');
Route::get('blog', 'FrontController@blog');

http://localhost:8000/blog 匹配这两个路由,因为{username} 可能是blog,因此将始终使用Route::get('/{username}', 'FrontController@user');

您必须更具体的路线名称(例如添加更多文本)或更具体的路线顺序。这是一个示例,您当前的路线按照您想要的方式排序。

Route::get('dashboard/password', 'UserController@password');

Route::post('dashboard/updatepassword', 'UserController@updatePassword');

// blog routes

    Route::get('blog', 'FrontController@blog');
    Route::get('blog/{slug}', 'FrontController@article');
    Route::get('blog/category/{name}', 'FrontController@BlogCategory');
    Route::get('blog/tag/{name}', 'FrontController@tags');

    Route::resource('comment', 'CommentController');

// PAGINA UTENTE  PUBBLICA

Route::get('{username}', 'FrontController@user');

【讨论】:

    猜你喜欢
    • 2015-12-13
    • 2016-04-20
    • 2017-10-02
    • 2013-05-03
    • 2014-09-08
    • 2015-03-18
    相关资源
    最近更新 更多