我是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
答案 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')