laravel 學習 一

次日
第一步 學習使用命令的方式建立視圖模板
php artisan generate:view admin._layouts.default
命令解釋   生成視圖模板文件,文件存放於視圖目錄下
          /view
	       /admin
	            /_layouts
		            default.blade.php      // 解釋一下,這個是模板文件,若是是用命令生成的那麼內容是空的,須要手動去修改.


頁面修改(admin/_layouts/default.blade.php)
<!doctype html>
<html>
<head>
  <meta charset="utf-8">
  <title>Learn Laravel 4</title>
   <!-- 從外部引入資源  -->
  @include('admin._partials.assets')

</head>
<body>
<div class="container">
  <div class="navbar navbar-inverse navbar-fixed-top">
  <div class="navbar-inner">
    <div class="container">
      <a class="brand" href="{{ URL::route('admin.pages.index') }}">Learn Laravel 4</a>
	<!-- 這個標記是用來外部引入資源的.  -->
      @include('admin._partials.navigation')
      
    </div>
  </div>
</div>
 
<hr>

  <!-- 這個標記是處理在模板繼承的過程當中內容塊的位置  -->
  @yield('main')

</div>
</body>
</html>


第二步,用命令生成登陸模板
php artisan generate:viw  admim.auth.login
編輯內容 (admin/auth/login.blade.php)   注意註釋代碼的書寫方式.
{{--  這個就是模板繼承的標記,同php的繼承是同樣的. --}}
@extends('admin._layouts.default')      {{-- 繼承了一個基本的佈局模板--}}

{{-- 這個標記會查詢父類模板中@yield的位置,以下代碼到@stop爲止,都會被父類模板中的@yield('main') 替換.--}}
@section('main')

  <div id="login" class="login">
     {{--開啓表單功能 --}}
    {{ Form::open() }}

      @if ($errors->has('login'))

        <div class="alert alert-error">{{ $errors->first('login', ':message') }}</div>
      
      @endif

      <div class="control-group">
        {{--表單的字段 --}}
        {{ Form::label('email', 'Email') }}
        
        <div class="controls">
          
          {{ Form::text('email') }}
        
        </div>
      </div>

      <div class="control-group">
        {{--表單字段--}}
        {{ Form::label('password', 'Password') }}
        
        <div class="controls">
          
          {{ Form::password('password') }}
        
        </div>
      </div>

      <div class="form-actions">
        {{--表單的提交--}}
        {{ Form::submit('Login', array('class' => 'btn btn-inverse btn-login')) }}
      
      </div>
    {{--關閉表單--}}
    {{ Form::close() }}
  
  </div>

@stop

第三步,初步探視控制器
在app/controller 下新建文件夾admin
使用命令來生成控制  php artisan generate:controller  admin/AuthController
初次生成,會看到控制器內有基本的crud操做的method_name ,能夠保留,
如今嘗試寫一個登陸的控制器
<?php
// 這個文件的命名空間
namespace App\Controllers\Admin;
// 這個是,以下操做會使用到的對象.
use Auth, BaseController, Form, Input, Redirect, Sentry, View;

class AuthController extends BaseController {

  /**
   * 顯示登陸頁面
   * @return View
   */
  public function getLogin()
  {
    // 使用view對象的make方法,生成登陸頁面
    return View::make('admin.auth.login');
  }

  /**
   * POST 登陸驗證
   * @return Redirect
   */
  public function postLogin()
  {
    // 接受從post傳遞過來的數據,	
    $credentials = array(
      'email'    => Input::get('email'),
      'password' => Input::get('password')
    );

   //  異常處理,若是鑑權成功,使用重定向跳轉,不然拋出異常.	
    try
    {
      $user = Sentry::authenticate($credentials, false);

      if ($user)
      {
        return Redirect::route('admin.pages.index');
      }
    }
    catch(\Exception $e)
    {
      return Redirect::route('admin.login')->withErrors(array('login' => $e->getMessage()));
    }
  }

  /**
   * 註銷
   * @return Redirect
   */
  public function getLogout()
  {
    Sentry::logout();

    return Redirect::route('admin.login');
  }

第四步 僅僅有控制器還不可以去訪問,還的須要路由來處理

Route::get('admin/logout', array('as' => 'admin.logout', 'uses' => 'App\Controllers\Admin\AuthController@getLogout'));
// 使用get的方式去訪問,
Route::get('admin/login', array('as' => 'admin.login', 'uses' => 'App\Controllers\Admin\AuthController@getLogin'));
Route::post('admin/login', array('as' => 'admin.login.post', 'uses' => 'App\Controllers\Admin\AuthController@postLogin'));

Route::group(array('prefix' => 'admin', 'before' => 'auth.admin'), function()
{
    Route::any('/', 'App\Controllers\Admin\PagesController@index');
    Route::resource('articles', 'App\Controllers\Admin\ArticlesController');
    Route::resource('pages', 'App\Controllers\Admin\PagesController');
});

// 路由過濾
Route::filter('auth.admin', function()
{
	if ( ! Sentry::check()) {
		return Redirect::route('admin.login');
	}
});

// 詳細的路由知識能夠看底層代碼.

此時能夠用路由來訪問網站了,

若是出現錯誤 ***類不存在等問題,能夠使用命令  composer dump-autoload 來更新autoload.php 文件
若是還提示其餘的頁面文件找不到,參考上述方法,自行生成

第五步: 生成填充數據
執行命令 php artisan generate:seed  sentry

<?php

// Composer: "fzaninotto/faker": "v1.3.0"
use Faker\Factory as Faker;

class SentryTableSeeder extends Seeder {

	public function run()
	{
		// run方法內的內容是手動寫上去的,請注意.自動生成的內容不是這樣的.
		DB::table('users')->delete();
		DB::table('groups')->delete();
		DB::table('users_groups')->delete();
	
		Sentry::getUserProvider()->create(array(
		'email'      => 'oo@xx.com',
		'password'   => "ooxx",
		'first_name' => 'OO',
		'last_name'  => 'XX',
		'activated'  => 1,
		));
	
		Sentry::getGroupProvider()->create(array(
		'name'        => 'Admin',
		'permissions' => ['admin' => 1],
		));
	
		// 將用戶加入用戶組
		$adminUser  = Sentry::getUserProvider()->findByLogin('oo@xx.com');
		$adminGroup = Sentry::getGroupProvider()->findByName('Admin');
		$adminUser->addGroup($adminGroup);
	}

}

在app/databases/seed/databaseseeder.php 中添加
$this->call('SentrySeeder');
隨後執行命令  php artisan db:seed
數據已填充,能夠嘗試去登陸.
相關文章
相關標籤/搜索