【问题标题】:Laravel 4 PHP Framework: View is not auto rendered?Laravel 4 PHP 框架:视图不是自动渲染的?
【发布时间】:2013-12-31 01:18:41
【问题描述】:

我可能错过了一些东西,但自己无法找出问题所在。

我得到白屏(存储/日志中没有日志,Apache 日志中有 200 个代码)。我认为 return View::make() 没有传递视图字符串。

在 routes.php 中

Route::get('/home', array('as' => 'home', 'uses' => 'HomeController@index'))->before('guest');

在filters.php中

Route::filter('guest', function(){
if (Auth::check() === true) {
    return Redirect::route('dashboard')->with('flash_notice', 'You are already logged in!');
}});

在 HomeController.php 中

class HomeController extends BaseController {
public function index()
{
    return View::make('login');
}}

在views/login.blade.php中

@extends('layouts.login')

在views/layouts/login.blade.php 中只是HTML

一旦我改变 return View::make('login');回显 View::make('login');我得到渲染视图。

我之前确实安装了相同的代码库并且它工作正常(是的,它也是 Laravel 4),所以我想知道这与新的库版本有什么关系。

感谢您的帮助。

【问题讨论】:

  • 你的 BaseController 中是否配置了 $layout 属性?
  • @petkostas 我没有。我应该手动配置它吗?在 BaseControll 我只有 protected function setupLayout() { if (is_null($this->layout)) { $this->layout = View::make($this->layout); } } 并且布局为空。
  • 你能粘贴你的 login.blade.php 文件吗?
  • link 当我在关闭 html 标记之前放置 die() 时,我看到了渲染视图。

标签: php laravel laravel-4


【解决方案1】:

在您的视图/布局文件夹中创建一个主文件 base.blade.php:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<title>Signin</title>
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css">
<link rel="stylesheet" href="//netdna.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap-theme.min.css">
<script src="//netdna.bootstrapcdn.com/bootstrap/3.0.0/js/bootstrap.min.js"></script>

<style>
  body {
      background-color: #EEEEEE;
      padding-bottom: 40px;
      padding-top: 40px;
  }
  .form-signin {
      margin: 0 auto;
      max-width: 330px;
      padding: 15px;
  }
  .form-signin .form-signin-heading, .form-signin .checkbox {
      margin-bottom: 10px;
  }
</style>
</head>

<body>
<div class="container">
@section('maincontent')
@show
</div>
</body>
</html>

然后在你的 login.blade.php 中:

@extends('layouts.base')
@section('maincontent')
<form class="form-signin" action="/login" method="POST" >
    @if ($errors->first('login'))
        <div class="alert alert-danger" >
            {{$errors->first('login')}}
        </div>
    @endif
    @if ($errors->first('password'))
        <div class="alert alert-danger" >
            {{$errors->first('password')}}
        </div>
    @endif
    @if(Session::has('flash_notice'))
        <div class="alert alert-danger" >
            {{Session::get('flash_notice')}}
        </div>
    @endif
    @if(Session::has('flash_success'))
        <div class="alert alert-success" >
            {{Session::get('flash_success')}}
        </div>
    @endif
    <h2 class="form-signin-heading">Please sign in</h2>
    <input type="text" class="form-control" placeholder="Login" name="login" autofocus>
    <input type="password" class="form-control" placeholder="Password" name="password" >
    <label class="checkbox"></label>
    <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button>
  </form>
  @stop

【讨论】:

  • 我尝试了这两种情况:使用 *.php 和 *.html 仍然没有运气。如果这有帮助,我会在 app/storage/views/ link 中生成 2 个文件
  • 抱歉是我的错误应该是blade.php的扩展
  • 别担心 =) 想知道为什么 Laravel 不渲染这些视图。由于我将 return 更改为 echo 并且它们被渲染,因此问题可能不在视图本身?也许一些负责渲染的父类没有做它的工作?我可以在每个控制器中使用 echo 吗?
  • 经过更深入的调试后,我发现问题与从 Laravel 4.0 升级到 4.1 版本有关更具体地说:“未定义索引:expire_on_close”。我刚刚在 app/config/session.php 中添加了 'expire_on_close' => false,谢谢你的帮助!
  • 不客气,很高兴看到你发现了问题:)
【解决方案2】:

改变路线:

Route::get('home', array('as' => 'home', 'before' => 'guest', 'uses' => 'HomeController@index'));

【讨论】:

  • 同样的结果。看起来问题出在视图/控制器中。
  • 尝试安装调试栏并检查返回的内容以及请求是否正常。
  • 我什至在 app/storage/views 中获得了“编译”视图:&lt;?php echo $__env-&gt;make('layouts.login', array_except(get_defined_vars(), array('__data', '__path')))-&gt;render(); ?&gt; 我想知道为什么 switch return View::make('login');回显 View::make('login');在控制器中就可以了。
  • 链接中的代码是您提供的实际模板吗?如果是,那么您的模板是错误的,这就是它不起作用的原因,您需要创建一个布局并从那里扩展登录:
  • 链接中的代码位于 app/views/layouts/login.blade.php 模板是 app/views/login.blade.php 并且只有一行没有空格:@extends(' layouts.login')
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-16
  • 1970-01-01
相关资源
最近更新 更多