【问题标题】:Laravel custom blade routing problemsLaravel 自定义刀片路由问题
【发布时间】:2017-01-07 08:39:17
【问题描述】:

首先,我完全不擅长使用 laravel,所以请多多包涵 :) 问题是,我正在尝试向 routes.php 文件中添加一个新的刀片路由,这是我猜的基本内容。

例如:

Route::get('testing', array('as' => 'testing', function()
    {
        return View::make('testing');
    }));

保存后出现这个错误:

Fatal error: Uncaught exception 'Illuminate\Database\Eloquent\ModelNotFoundException' with message 'No query results for model [App\Models\Page].' in /var/www/htdocs/myappname/vendor/illuminate/database/Illuminate/Database/Eloquent/Builder.php:126 Stack trace: #0 /var/www/htdocs/myappname/app/Models/Page.php(100): Illuminate\Database\Eloquent\Builder->firstOrFail() 
#1 [internal function]: App\Models\Page->scopeFindByReference(Object(Illuminate\Database\Eloquent\Builder), 'testing') 
#2 /var/www/htdocs/myappname/vendor/illuminate/database/Illuminate/Database/Eloquent/Builder.php(834): call_user_func_array(Array, Array) 
#3 /var/www/htdocs/myappname/vendor/illuminate/database/Illuminate/Database/Eloquent/Builder.php(915): Illuminate\Database\Eloquent\Builder->callScope('scopeFindByRefe...', Array) 
#4 [internal function]: Illuminate\Database\Eloquent\Builder->__call('findByReference', Array) 
#5 [internal function]: Illuminate\Database\Eloquent\Builder->findByReference('testing') in /var/www/htdocs/myappname/vendor/illuminate/database/Illuminate/Database/Eloquent/Builder.php on line 126

在 routes.php 中有类似的内容,但它不会加载刀片,而是加载在 cms 中创建的页面,该页面具有 slug 测试。如果我删除该页面或重命名它,则会弹出常规 404 错误。

 if ($page->slug == 'testing') {
            $page->view = 'testing_homebld';
        }

由于应用程序开发人员没有留下任何文档,因此不知道还能做什么。

感谢小伙伴们的帮助!

【问题讨论】:

  • 为什么不使用 Route::get('testing', function(){return View::make('testing');}); ?
  • 错误提示找不到页面模型。您的应用程序是否试图在某处(在视图中,或者理想情况下在控制器中)创建一个实例?另外,你使用的是什么版本的 Laravel?
  • 您好,如果我使用它,我会收到此错误:致命错误:第 201 行的 /var/www/htdocs/myappname/routes.php 中找不到类 'Route' 真的很奇怪。 ://

标签: php laravel


【解决方案1】:

听起来您遇到了路由冲突。 if ($page->slug == 'testing') { 代码可能在 PageController.php 控制器中,我认为(不是你所说的 routes.php );错误消息还描述了页面模型。这表明其他路由正在处理您的请求,而不是您的测试路由。

我的猜测是你在 routes.php 中有这样的东西,它正在捕捉你对http://your-site/testing 的请求(控制器名称和方法显然可以是你代码中的任何东西):

Route::get('/{slug}', 'PageController@page');

这将匹配并处理对http://your-site/testing的请求。

您的新测试路由可能出现在此页面路由之后,这意味着它被忽略 - 第一个匹配的路由优先,后续匹配被忽略。

最快的解决方法是将您的新测试路径移动到冲突的页面路径之上,这样它就会优先。

【讨论】:

  • 嘿,如果我添加上面的代码,我会收到此错误:致命错误:第 201 行的 /var/www/htdocs/myappname/routes.php 中找不到类 'Route' 真的很奇怪发生了,我想我必须继续挖掘文件,并找出到底发生了什么。感谢所有答案!
  • 添加什么代码?我所建议的只是将您现有的代码移动到路由文件中。
猜你喜欢
  • 2021-07-02
  • 2020-04-08
  • 2016-09-13
  • 2014-01-05
  • 1970-01-01
  • 1970-01-01
  • 2018-11-20
  • 2016-12-26
  • 1970-01-01
相关资源
最近更新 更多