0

私はlaravelが初めてで、基本的なアプリのチュートリアルに従っています。これまでのところ、アプリにはデフォルトのビュー layouts/default.blade.php、部分的な _partials/errors.blade.php、および他の 3 つのビュー question/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'));

question/index.blade.php と users/new.blade.php は正常に読み込まれ、default.blade.php 内にあります

/login を呼び出すと、default.blade.php を使用していなくても空白のページが読み込まれます。default.blade.php が他のルートで機能し、他のすべてが同じであることがわかる限り、login.blade.php のブレード構文に問題があると推測していますが、それが teh だった場合場合でも、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();
            }
        }
    }
?>

最後に login.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
4

3 に答える 3

1

コントローラから直接レイアウト テンプレートを定義することもできます。この方法では、複数のレイアウト テンプレートで同じビューを使用できるため、柔軟性が向上します。

<?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 を使用していますが、同じ概念が非 Namespaced Controllers にも適用できます。

注意: 私たちの 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」が定義されている場合は、「準備」コードも実装されていることを確認してください。

于 2013-09-11T22:26:51.647 に答える
0

エラーが見つかりました

login.blade.php テンプレートの先頭に @extends('layouts.default') がありませんでした

于 2013-09-11T19:21:31.137 に答える