Laravel 5视图(';测试';)在控制器中没有按预期工作


Laravel 5 - view('test') in controllers not working as expect

我是Laravel的新手。我阅读了文档和谷歌搜索,但我找不到问题的答案。

我试图呈现一个简单的视图test.blade.php(位于resources/views)。

a) 第一次尝试:在app/Http/routes.php中我编写了

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

它起作用了。万岁!我看到我的简单网站

b) 第二次尝试:在app/Http/routes.php中我编写了

Route::get('/', 'WelcomeController@index');

我在app/Http/Controllers中创建了一个控制器WelcomeController.php在控制器内部,我写道:

namespace App'Http'Controllers;
use Illuminate'Http'Request;
use App'Http'Requests;
use App'Http'Controllers'Controller;
class WelcomeController extends Controller
{
    public function index()
    {
        return view('test');
    }
}

而且。。。。这不起作用,我只看到一页空白。好吧,我一直在挖掘,试图弄清楚问题出在哪里。我将retun view('test')更改为return view()->make('test`);但这也不起作用——它只生成空白页。。。。

然后我简单地将retun改为echo:echo view("测试");它正在发挥魅力。

我做错了什么?互联网上的所有例子都显示返回视图('..')而不是回声视图('..')(这很难看)。。。

请帮助我:)

经过几个小时的挖掘,我找到了!

我决定创建第二个项目,并使用composer在另一个目录中安装laravel。接下来,我打开了很棒的工具名Meld,我用它来比较这两个安装。我注意到位于app/Http/Controllers 的主控制器controller.php中存在一些差异

在我的第一次安装中(有问题)是:

<?php
namespace App'Http'Controllers;
use Illuminate'Foundation'Bus'DispatchesJobs;
use Illuminate'Routing'Controller as BaseController;
use Illuminate'Foundation'Validation'ValidatesRequests;
use Illuminate'Foundation'Auth'Access'AuthorizesRequests;
abstract class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
    public $auto_render = true;
    /**
     * Execute an action on the controller.
     *
     * @param  string  $method
     * @param  array   $parameters
     * @return 'Symfony'Component'HttpFoundation'Response
     */
    public function callAction($method, $parameters)
    {
        parent::callAction($method, $parameters);
    }    
}

在第二次安装中:

<?php
namespace App'Http'Controllers;
use Illuminate'Foundation'Bus'DispatchesJobs;
use Illuminate'Routing'Controller as BaseController;
use Illuminate'Foundation'Validation'ValidatesRequests;
use Illuminate'Foundation'Auth'Access'AuthorizesRequests;
abstract class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;
}

我决定从Controller.php中删除callAction,因为它只调用父方法。然后我在浏览器中查看了我的页面。。。和

Hurray它正在工作。。。。返回视图("测试")正常工作。。。

我认为,在之前的Laravel版本中,这个方法被添加了,在下一个版本中,有人删除了它……但为什么它会阻止渲染模板?

发生这种情况是因为被覆盖的函数没有返回结果。。。当我把这个功能改成这样时:

public function callAction($method, $parameters)
{
    return parent::callAction($method, $parameters);
}

这就是解决方案!现在一切都很顺利。

我要感谢大家,特别是maytham mahiam和revo,感谢你们的大力帮助。

另一种方法是使用数组定义路由

试试这个:

您也可以在数组中指定控制器和操作。

这里我们说的是在WelcomeController中使用索引函数的路径

添加routes.php

Route::get('/', [ 'uses' => 'WelcomeController@index' ]);

希望这会有所帮助。