Laravel 4特定视图无法加载

时间:2013-09-11 19:02:52

标签: laravel laravel-4

我是laravel的新手并且遵循基本应用程序的教程。到目前为止,该应用程序有一个默认的视图layouts / default.blade.php,一个部分_partials / errors.blade.php和另外三个视图问题/ index.blade.php,users / new.blade.php和users / login.blade .PHP

路线的定义如下

// home get route
Route::get('/', array('as'=>'home', 'uses'=>'QuestionsController@get_index'));

//user register get route

Route::get('register', array('as'=>'register', 'uses'=>'usersController@get_new'));

// user login get route

Route::get('login', array('as'=>'login', 'uses'=>'usersController@get_login'));

//user register post route

Route::post('register', array('before'=>'csrf', 'uses'=>'usersController@post_create'));

// user login post route

Route::post('login', array('before'=>'csrf', 'uses'=>'usersController@post_login'));

questions / index.blade.php和users / new.blade.php加载正常并在default.blade.php中

当我调用/登录时,即使使用default.blade.php也没有加载空白页面。我猜我的login.blade.php中的刀片语法存在问题,因为default.blade.php可以在其他路由上工作,据我所知,其他一切都是相同的,但如果那是teh case至少不能将default.blade.php路由加载吗?

此路由正在调用的控制器方法如下

<?php

    Class UsersController extends BaseController {

        public $restful = 'true';
        protected $layout = 'layouts.default';

        public function get_login()
        {
            return View::make('users.login')
            ->with('title', 'Make It Snappy Q&A - Login');
        }

        public function post_login()
        {
            $user = array(
                'username'=>Input::get('username'),
                'password'=>Input::get('password')
            );

            if (Auth::attempt($user)) {
                return Redirect::Route('home')->with('message', 'You are logged in!');
            } else {
                return Redirect::Route('login')
                ->with('message', 'Your username/password combination was incorrect')
                ->withInput();
            }
        }
    }
?>

最后登录.blade.php

@section('content')
    <h1>Login</h1>

    @include('_partials.errors')

    {{ Form::open(array('route' => 'register', 'method' => 'POST')) }}

    {{ Form::token() }}

    <p>
        {{ Form::label('username', 'Username') }}
        {{ Form::text('username', Input::old('username')) }}
    </p>

    <p>
        {{ Form::label('password', 'Password') }}
        {{ Form::text('password') }}
    </p>

    <p>
        {{ Form::submit('Login') }}
    </p>

    {{ Form::close()}}

@stop

3 个答案:

答案 0 :(得分:1)

您也可以直接从Controller定义布局模板,这种方法提供了更大的灵活性,因为同一个View可以与多个布局模板一起使用。

<?php namespace App\Controllers ;

use View , BaseController  ; 

class RegisterController extends BaseController {

    protected $layout = 'layouts.master';

    public function getIndex()
    {
        // Do your stuff here 

        // --------- -------

        // Now call the view 
        $this->layout->content = View::make('registration-form');
    }

}

我的示例使用Namespaced Controller,但相同的概念适用于非命名空间控制器。

注意:我们的RegisterController扩展了Laravel的默认BaseController,为我们做了一些准备,请参阅下面的代码:

<?php

class BaseController extends Controller {

    /**
     * Setup the layout used by the controller.
     *
     * @return void
     */
    protected function setupLayout()
    {
        if ( ! is_null($this->layout))
        {
            $this->layout = View::make($this->layout);
        }
    }

}

如果定义了自定义“Basecontroller”,请确保它还实现了“准备”代码。

答案 1 :(得分:1)

我不知道对你来说什么是新概念,所以让我做几个随意的假设。如果“namespace”和“Basecontroller”是&lt;&lt;奇怪的话&gt;&gt;让我试着揭开这些话的神秘面纱。

命名空间: PHP's documentation在此主题上有很好的文档记录。我的过度简化说明如下:两位熟练的开发人员(JohnD和Irish1)决定构建他们自己的PHP Logging Library并将代码作为开源发布给社区。他们很可能会将他们的名字命名为“Log”。 现在,另一位开发人员希望将这两个库实现到他/她的项目中(因为JohnD的代码使用MongoDB作为存储介质,而Irish1的代码使用Redis)。 PHP的解释器如何区分这两个代码库?只需在每个库前加上供应商名称(JhonD / Log和Irish1 / Log)。

Basecontroller:很可能您的控制器将共享通用功能(数据库连接,过滤器前后共用,View的常用模板......)。最好不要将这个“通用功能”单独定义到每个Controller中,而是定义一个“父”控制器,所有其他控制器将从该控制器继承其功能。所以稍后,如果您决定对代码进行更改,则只应编辑一个位置。 我之前的示例使用“类RegisterController扩展BaseController ”,BaseController只是检查我们(或任何其他)Child控制器是否定义了名为“ $ layout “,如果是这样,它将实例化的视图将被封装到指定的布局中。请参阅Laravel的灵活性,一组控制器共享通用功能(通过扩展Basecontroller),但也可以自由选择自己的布局(如果他们希望这样做)。

答案 2 :(得分:0)

我发现了我的错误

我在login.blade.php模板的开头没有@extends('layouts.default')