Laravel路线似乎不起作用

时间:2017-01-19 17:23:56

标签: php laravel laravel-5 laravel-5.3 fedora

我是Laravel的新手。

我通过Oracle VirtualBox设置了Fedora 23服务器,安装了作曲家并创建了一个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.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');

应用程序/ HTTP /控制器/ 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');
        }

}

公共/ 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>

/etc/httpd/conf/httpd.conf(为了长度目的,我删除了此处示例中的注释行)

ServerRoot "/etc/httpd"

Listen 80

Include conf.modules.d/*.conf

User apache
Group apache

ServerAdmin root@localhost

<Directory />
    AllowOverride none
    Require all denied
</Directory>

DocumentRoot "/var/www/html/public"

<Directory "/var/www">
    AllowOverride none
    # Allow open access:
    Require all granted
</Directory>

<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

<IfModule dir_module>
    DirectoryIndex index.html
</IfModule>

<Files ".ht*">
    Require all denied
</Files>

ErrorLog "logs/error_log"

LogLevel warn

<IfModule log_config_module>
    LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%h %l %u %t \"%r\" %>s %b" common

    <IfModule logio_module>
      LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>

    CustomLog "logs/access_log" combined
</IfModule>

<IfModule alias_module>
    ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
</IfModule>

<Directory "/var/www/cgi-bin">
    AllowOverride None
    Options None
    Require all granted
</Directory>

<IfModule mime_module>
    TypesConfig /etc/mime.types
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    AddType text/html .shtml
    AddOutputFilter INCLUDES .shtml
</IfModule>

AddDefaultCharset UTF-8

<IfModule mime_magic_module>
    MIMEMagicFile conf/magic
</IfModule>

EnableSendfile on

IncludeOptional conf.d/*.conf

毕竟,我可以通过输入http://«IP»来查看欢迎页面,但如果输入http://«IP»/ home,我只会得到一个空白页面。浏览器告诉我返回的页面有500内部服务器错误,但是在storage / logs / laravel.log中没有显示任何内容(最后一个日志是错误,因为php artisan route:由于视图而无法执行缓存在web.php文件中返回)

[2017-01-19 13:00:49] local.ERROR: exception 'LogicException' with message 'Unable to prepare
route [/] for serialization. Uses Closure.'
in /var/www/html/vendor/laravel/framework/src/Illuminate/Routing/Route.php:995

对我来说最奇怪的部分是,如果我评论路由文件中的所有条目,我会获得http://«IP»/ home的路由未找到异常,但是如果我只输入http://«IP »我仍然得到了欢迎刀片。

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

欢迎任何帮助/建议。

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

3 个答案:

答案 0 :(得分:2)

终于搞定了!

在阅读https://woohuiren.me/blog/installing-laravel-5-on-fedora/上的评论后,显然与我有同样问题的用户说了以下内容:

  

似乎发出此命令解决空白页(错误代码500)

     

$ cd laravel_project

     

$ php artisan cache:clear

     

$ chmod -R 777存储

     

$ composer dump-autoload

     

我将SElinux设置为允许,应该没问题吗?

我的页面显示没问题。

答案 1 :(得分:0)

事实证明,如果你有任何路由作为闭包,你就不能使用Laravel 5的任何路由缓存(因为它不会缓存该函数)。关闭就像:

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

停止缓存路线,或删除所有这些闭包。有关详情,请参见this GitHub issue

答案 2 :(得分:0)

听起来像你的日志不是造成500错误的错误。如果您删除该日志并尝试导航到该路线,那么您将不会看到任何错误。我最后一次碰到这个是我的存储目录没有创建和/或他们的权限是不正确的。确保您的存储目录可由Web服务器写入(我通常设置为775)并且所有目录都存在。如果他们不这样做,请创建它们:

storage/
|
|-- app/
|   |-- public/
|
|-- framework/
|   |-- cache/
|   |-- sessions/
|   |-- views/
| 
|-- logs/