10

私はlaravelを初めて使用し、最初のアプリケーションで管理パネルの承認を設定しています。ファイルを現在設定している方法は次のとおりです。

controllers/
    admin/
        dashboard.php
        settings.php
    non-admin-controller1.php
    non-admin-controller1.php
views/
    admin/
        dashboard.blade.php
        login.blade.php
        template.blade.php
    non-admin-view1.php
    non-admin-view1.php
    non-admin-view1.php

...そして、これらは私のルートです

Route::get('admin/login', function()
{
    return View::make('admin.login');
});

Route::get('admin/logout', function()
{
    return Auth::logout();
    return Redirect::to('admin/login');
});

Route::post('admin/login', function()
{
    $userdata = array('username' => Input::get('username'),
                      'password' => Input::get('password'));
    
    if (Auth::attempt($userdata))
    {
        return Redirect::to('admin');
    }
    else
    {
        return Redirect::to('admin/login')->with('login_errors',true);
    }
});

Route::controller('admin.dashboard');

Route::get('admin', array('before' => 'auth', function() {
    return Redirect::to_action('admin@dashboard');
}));

Route::filter('auth', function()
{
    if (Auth::guest()) return Redirect::to('admin/login');
});

/admin に移動すると、admin/login にリダイレクトされ、ログインするように求められます。ログインすると、管理者/ダッシュボードにリダイレクトされ、そこでもすべて問題なく表示されます。ただし、2つの問題があります。

  1. 管理者/ログアウトに移動すると、ログアウトされますが、空白のページが表示されます (管理者/ログインにリダイレクトされません)

  2. ログアウトしたときに管理者/ダッシュボードにアクセスすると、エラーが表示されます

ビューのレンダリング エラー: [admin.dashboard]

非オブジェクトのプロパティを取得しようとしています

ここで何が間違っていますか?私は何をしているのですか?管理者用に別のバンドルを作成する方が理にかなっていますか? ありがとう!

4

3 に答える 3

10

そのため、少し異なる方法で問題を解決することができました。実行前に認証フィルターを呼び出すコンストラクターを使用して、コントローラーフォルダーのルートに (ベース) Admin_Controller を作成しました。

class Admin_Controller extends Base_Controller {

    public function __construct()
    {
        $this->filter('before', 'auth');
    }

}

そして、 /controllers/admin 内のすべての管理関連コントローラーを作成して、Admin_Controller を拡張し、親コンストラクターを呼び出します。

class Admin_Dashboard_Controller extends Admin_Controller {

    public function __construct()
    {
        parent::__construct();
    }

    public function action_index()
    {
        return View::make('admin.dashboard');
    }

}

これは最も雄弁な解決策ではないかもしれませんが、うまくいきます!

于 2013-04-07T04:57:52.457 に答える
8

将来の読者のために、これを処理するための非常にクリーンな方法は、Laravel のRoute Groupsを使用することです。

ルート グループを使用すると、ミドルウェアや名前空間などのルート属性を多数のルートで共有できます。個々のルートでそれらの属性を定義する必要はありません。

Route::group(['middleware' => 'auth'], function () {
    Route::get('/', function ()    {
        // Uses Auth Middleware
    });

    Route::get('user/profile', function () {
        // Uses Auth Middleware
    });
});

認証だけでなくNamespacesSub-Domains、 、その他にも使用できます。

于 2015-12-31T22:48:19.170 に答える