Php 拉雷维尔航线唐';好像不行
我是拉威尔的新手 我通过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文件上的视图,它会给我一个错误: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”。
[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');})但是它给了我闭包错误,所以我为它们创建了控制器函数,这很奇怪。请尝试从routes.php文件中删除所有路由,并只保留此路由: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');