Php 拉雷维尔航线唐';好像不行

Php 拉雷维尔航线唐';好像不行,php,laravel,laravel-5,laravel-5.3,fedora,Php,Laravel,Laravel 5,Laravel 5.3,Fedora,我是拉威尔的新手 我通过Oracle VirtualBox设置了Fedora 23服务器,安装了composer,并创建了一个Laravel 5.3项目作为html文件夹(为了方便起见,因为它可以通过虚拟机的IP地址访问)。我还禁用了它的防火墙,因为这只是为了测试/学习 我授予存储文件夹755权限,只需键入http://«IP»即可在浏览器上显示欢迎页面 我创建了index.blade.php视图,其代码与welcome.blade.php相同,但将单词Laravel改为“Something”。

我是拉威尔的新手

我通过Oracle VirtualBox设置了Fedora 23服务器,安装了composer,并创建了一个Laravel 5.3项目作为html文件夹(为了方便起见,因为它可以通过虚拟机的IP地址访问)。我还禁用了它的防火墙,因为这只是为了测试/学习

我授予存储文件夹755权限,只需键入http://«IP»即可在浏览器上显示欢迎页面

我创建了index.blade.php视图,其代码与welcome.blade.php相同,但将单词Laravel改为“Something”。现在问题来了

我创建了一个HomeController.php控制器,这样我就可以无误地获取php artisan route:cache,因为如果我返回routes/web.php文件上的视图,它会给我一个错误:

[myuser@webserver]$ php artisan route:cache
Route cache cleared!

[LogicException]
Unable to prepare route [/] for serialization. Uses Closure.
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| This file is where you may define all of the routes that are handled
| by your application. Just tell Laravel the URIs it should respond
| to using a Closure or controller method. Build something great!
|
*/

/*
Route::get('/', function () {
    return view('welcome');
});

Route::get('home', function () {
    return view('index');
});
*/

Route::get('/', 'HomeController@getWelcomePage');
Route::get('home', 'HomeController@homepage');
namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;

class HomeController extends Controller
{
        public function homepage(){
                return view('index');
        }

        public function getWelcomePage(){
                return view('welcome');
        }

}
因此,我的文件如下所示:

routes/web.php
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| This file is where you may define all of the routes that are handled
| by your application. Just tell Laravel the URIs it should respond
| to using a Closure or controller method. Build something great!
|
*/

/*
Route::get('/', function () {
    return view('welcome');
});

Route::get('home', function () {
    return view('index');
});
*/

Route::get('/', 'HomeController@getWelcomePage');
Route::get('home', 'HomeController@homepage');
app/Http/Controllers/HomeController.php
namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;

class HomeController extends Controller
{
        public function homepage(){
                return view('index');
        }

        public function getWelcomePage(){
                return view('welcome');
        }

}
public/.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]

    # Handle Authorization Header
    RewriteCond %{HTTP:Authorization} .
    RewriteRule .* - [E=HTTP_AUTHORIZATION:%{HTTP:Authorization}]
</IfModule>
对我来说最奇怪的是,如果我对路由文件中的所有条目进行注释,我会得到http://«IP»/home的route not found异常,但如果我只键入http://«IP»,我仍然会得到欢迎刀片

我相信我的问题很简单,但经过数小时的搜索和尝试/错误,我仍然无法解决这个问题

欢迎提供任何帮助/建议


编辑:我的问题不是闭包错误,我为路由创建了控制器方法。我的问题是,服务器只提供欢迎刀片,其他所有服务器都给我一个500内部服务器错误

结果是,如果您有任何作为闭包的路由(因为它不会缓存该函数),您就不能对Laravel 5使用任何路由缓存。一个类似于:

Route::get('/', function() {
    return view('welcome');
});

停止缓存路由,或者删除所有这些闭包。有关详细信息,请参见。

听起来您的日志中的错误并不是导致500错误的原因。如果删除该日志并尝试导航到该路由,则不会看到任何错误。上次我遇到这个问题是我的存储目录没有创建和/或它们的权限不正确。确保您的存储目录可由Web服务器写入(我通常设置为775),并且所有目录都存在。如果没有,请创建它们:

storage/
|
|-- app/
|   |-- public/
|
|-- framework/
|   |-- cache/
|   |-- sessions/
|   |-- views/
| 
|-- logs/
终于找到了

在阅读上的评论后,一位显然与我有相同问题的用户说:

似乎发出这个命令来解决空白页(错误代码500)< /P> $cd laravel_项目

$php artisan缓存:清除

$chmod-R 777存储

$composer转储自动加载

我将SElinux设置为允许,应该可以吧


我看到页面时没有问题。

有没有关闭的路线?比如
Route::get('my_Route',function(){…})?我的代码是这样的:
Route::get('/',function(){returnview('welcome');});路由::get('home',函数(){returnview('index');})Route::get(“/”,'HomeController@getWelcomePage');。甚至有评论的行。然后再次运行cache命令,看看它是否有效。cache命令对注释掉的行有效(我删除它们只是为了确保),我的问题是服务器只显示欢迎页面。如果我键入http://«IP»/home,我会得到一个500代码,但laravel.log不会显示任何内容。即使我删除了所有的路由,我仍然得到了欢迎刀片(这对我来说是最奇怪的),如果你检查我的Routes/web.php文件,你可以看到闭包被注释,我创建了控制器函数来返回视图:
Route::get('/'),'HomeController@getWelcomePage'); 路线::get('home','HomeController@homepage');我假设另一个带有闭包的路由可能隐藏在您文件的更深处。如果不是这样,也许可以尝试运行
php artisan route:clear
来重置。我明天一回到工作岗位就会尝试,但在离开之前,我做了一个route:list,两个路由(“/”和“home”)都正确显示,指向正确的控制器和功能您的Web服务器是否可能正在查看过时的缓存路由?换句话说,如果您在主目录中编程,然后使用构建工具部署到Apache访问的不同目录(等等),那么您的缓存可能仍然过时。您需要在Web服务器访问的目录中运行
php artisan-route:clear
。(通过阅读所有的评论,听起来很明显,您有两个不同的目录,您正在使用的目录是固定的,但服务器仍然使用旧的缓存。)我对此表示怀疑,因为我正在使用“默认”Apache目录(/var/www/html),但我明天一回到工作岗位就开始调查。我已经给了存储文件夹775权限,正如我在另一个主题上读到的那样,它没有解决我的问题,导致我将权限恢复到755。我认为存储目录树都在那里,但我明天一回去工作就会确认,我会给出反馈。我再次授予775权限,并检查了存储目录树,它都在那里,但它仍然没有显示我的页面:
[myuser@webserverhtml]$tree存储/存储/├── 应用程序│   └── 公开的├── 框架│   ├── 隐藏物│   ├── 会议│   │   └── ykUYX0zVingXqhM9DEOvQG9xbXWYNW6d53RuD4Ab│   └── 意见│       └── b18d705f49d4cb87cb2bde363b3ca5bd2bbb5823.php└── 日志└── laravel.log 7个目录,3个文件
P.S.:我试图编辑评论,但5分钟已过,抱歉搞砸了,我不知道评论不支持换行符。很高兴你找到了答案!继续接受你自己的答案,让其他偶然发现这个问题的人知道是什么帮助了他们:)我只能
/*
|--------------------------------------------------------------------------
| Web Routes
|--------------------------------------------------------------------------
|
| This file is where you may define all of the routes that are handled
| by your application. Just tell Laravel the URIs it should respond
| to using a Closure or controller method. Build something great!
|
*/

/*
Route::get('/', function () {
    return view('welcome');
});

Route::get('home', function () {
    return view('index');
});
*/

Route::get('/', 'HomeController@getWelcomePage');
Route::get('home', 'HomeController@homepage');