laravel Sentry 2管理员组

我们学习了如何使用Laravel创建处理Web应用程序功能,如购物车,用户信用和订单。我们创建了自己包管理购物车的功能和内置的网页,为用户的仪表板,登录,和注册。

现在,我们将学习如何构建我们的应用程序的管理区域。我们将建设功能,如订单管理和用户管理,这将是我们的朋友约旦非常有用的。但首先,它的时间再次见到他,显示他的不同的功能演示,并讨论了他认为对管理部分。所以,我们又见面了,并讨论了站点之后,他告诉我,他将需要能够以下面的东西作为管理员。

• 通过安全的网页进行本行政区域内登录的普通用户无法登录
• 请放置在应用程序的命令
• 在更新的情况下订货需要的东西要改变
• 导出新订单到Excel文件
• 管理Foldagram单位的价格
• 管理基础上的数量,价格范围Foldagram单位用户学分
• 新增信贷为用户
• 添加新用户
• 管理用户,也就是更新或块或删除它们
• 万一有人更改用户密码请求复位

这是我们的第二次迭代的阶段的要求。因此,让我们写下我们作为特征,并得到了我们需要一个想法要求完成这些任务:

• 建立了管理区的基础
• 系统管理员的登录部分
• 管理订单
• 导出订单
• 管理Foldagram定价
• 新增信贷为用户
• 用户管理
• 重设密码
• 阻止用户

建立了管理区的基础

管理后台部分,我们将创建一个具有管理员一个单独的布局控制器保存密钥到后端。管理部分必须的所有路由开始 /admin 作为这样我们可以管理的东西,如身份验证和路线。

在设置,让我们来讨论我们将如何区分正常的用户管理员。好了,我们将使用 Sentry 的Groups,我们的认证包。它的工作方式是,你设置的Sentry组,然后添加一个用户到特定的组,当谁第一次访问您把支票路线对谁属于该组。

在这里,我们需要定义一个管理组。我们将尝试这个过程只一次,所以我会写一个闭包的路由功能来实现它:

Route::get('/creategroup', function()
{
try
{
// Create the group
$group = Sentry::createGroup(array(
'name' => 'Administration',
'permissions' => array(
'read' => 1,
'write' => 1,
),
));
}
catch (Cartalyst\Sentry\Groups\NameRequiredException $e)
{
echo 'Name field is required';
}
catch (Cartalyst\Sentry\Groups\GroupExistsException $e)
{
echo 'Group already exists';
}
});

在这里,当您运行yoursite.com/ creategroup,Sentry 创建该组命名管理两种类型的权限:读取和写入。但是权限?嗯,权限可以是任何东西。这里,在这些情况下章,它是为未来的需求。例如,如果我们想创建一个管理员谁只能从中读取数据,我们可以通过 Sentry 轻松地设置这些权限。

一旦管理组被创建,你可以安全地删除路由出于安全原因。如果您想确认是否创建该组,你可以做这样通过运行下面的代码:

Route::get('/checkgroup', function()
{
try
{
$group = Sentry::findGroupByName('administration');
}
catch (Cartalyst\Sentry\Groups\GroupNotFoundException $e)
{
echo 'Group was not found.';
}
});

Sentry会尝试搜索在其集团的表的管理组。如果Sentry没有找到该组,它会返回一个错误。这样,你就会知道你的小组已创建。不要忘了删除此路由。

Administration Group Exists 管理组存在

现在,你一定想知道如何创建一个属于该组的用户。这里是你如何能做到这一点:

Route::get('/createadminuser', function()
{
try
{
// Find the group using the group name
$adminGroup = Sentry::findGroupByName("administration");
// Create the user
$user = Sentry::createUser(array(
'email' => 'adminuser@example.com',
'password' => '123456',
));
// Assign the group to the user
$user->addGroup($adminGroup);
}
catch (Cartalyst\Sentry\Users\PasswordRequiredException $e)
{
echo 'Password field is required.';
}
catch (Cartalyst\Sentry\Users\UserExistsException $e)
{
echo 'User with this login already exists.';
}
catch (Cartalyst\Sentry\Groups\GroupNotFoundException $e)
{
echo 'Group was not found.';
}
});

我们首先需要通过 Sentry::createUser 方法来创建用户。
然后,我们将有一个User对象。在那之后,我们可以发现使用Sentry:: findGroupByName方法找到administration组。
现在,通过用户对象,我们已经获得了我们创建具有ADDGROUP方法,使我们能够通过只是路过我们的目标用户添加到组中的用户对象。如果一切顺利,Sentry将创建一个用户adminuser@example.com并将其加入到我们的应用程序的管理组。

Admin user is created  管理员用户创建
Admin user assigned to administration group  分配到管理组管理员用户

如果有什么不顺心的事?哨兵将通过其异常处理错误部分。说,例如,与该电子邮件地址的用户已经存在于我们的数据库中;

Sentry将引发UserExistsException例外。同样,Sentry将处理所有的验证,我们不必手动检查任何验证的任何团体或用户。同样,为了安全起见,不要忘记之后删除这些路由创建管理用户。

所以,现在我们有一个理论上的管理组将处理管理该应用程序的功能。我们已经创建的管理员为我们的应用程序了。让我们开始工作的管理应用程序的结构。

验证每个管理员的要求,我们将创建一个路由组。但是,什么是路由组? Laravel提供了一个功能将过滤器添加到组路线,这就是所谓的组路由。在路由组,您可以定义过滤器应该在任何运行在该组中所定义的路由被执行。

因此,我们可以写一个过滤器,将验证管理员用户,然后使用该在路由组筛选,这样任何路由之前,用户可以通过认证执行。让我们先来定义我们的行政滤波器在我们filters.php文件:

Route::filter('administrationauth', function()
{
if (Sentry::check())
{
$user = Sentry::getUser();
$admin = Sentry::findGroupByName('administration');
if (!$user->inGroup($admin))
{
Redirect::to('login');
}
}else{
Redirect::to('login');
}
});

在这里,我们首先检查用户是否登录,通过Sentry::check方法。如果没有登录,它会将用户重定向到登录路线。
如果已登录,Sentry::getUser方法将返回当前登录的用户为对象。

然后我们通过用户对象检查用户是否在管理组。如果不在,我们将重定向到登录页面。这个过滤器将管理我们整个管理认证部分。

创建管理员登录部分

现在我们需要对用户进行认证。让我们先加后的路线并发送用户要求我们postlogin管理员控制器的方法:

Route::get('admin/login', array('as' => 'adminlogin', 'uses' => 'AdminController@getLogin'));

管理用户
接下来的部分,我们现在需要建立的管理用户在我们的系统中。我们将
需要建立从那里管理员可以添加一个接口,编辑或删除用户。
我们还需要建立以下两个特点约旦要求:
• 阻止用户
• 更改用户密码

我们想要做的通过一个屏幕管理所有与用户相关的功能,所以管理员可以轻松地完成所有这些任务。这是我们决定,发现布局这将是更容易使用:

总结
在这一章中,我们已经学会了如何创建管理员仪表板为我们的
应用程序。我们还了解到了以下主题:
• 构建管理基础部分
• 登录部分管理员
• 导出并管理订单
• 管理Foldagram定价
• 新增信贷为用户
• 用户管理
• 重设密码
我们已经完成了Foldagram Web应用程序本章。在接下来的本章中,我们将学习如何构建REST风格的API与Laravel。

laravel 用户管理包 Sentry 2

经过我们的用户部分的讨论,我们决定,下面的列表是必不可少的用户部分:
• 用户应该能够注册
• 用户应该能够登录
• 用户仪表盘应提供其中一个用户可以看到所有他帐户选项
• 用户应该能够更改密码
• 用户应该能够管理他的个人资料

所以,现在我们需要用下面的页面创建用户部分:
• 用户注册
• 用户登录
• 用户仪表板
• 用户更改密码
• 管理配置文件
我们将为用户部分的布局,因为所有的用户特征将具有相同外观和感觉。我们将存储所有的用户剖面视图在一个单独的用户文件夹,创建用于部分的特殊布局文件,所以在未来,如果我们需要更改应用到本节中,我们可以很容易地通过用户的布局适用。

Laravele有丰富的扩展包,Packagist是主要Composer仓库。它聚集各种PHP软件包是安装与Composer.Browse包或提交您自己的。https://packagist.org/
Sentry是一个简单,功能强大且易于使用的授权和身份验证程序包。它提供了额外的功能,如组,权限,自定义哈希算法和额外的安全功能。
https://cartalyst.com/manual/sentry

产品特点:
它还提供了额外的功能,如用户组和额外的安全功能:
可配置的验证(可以使用所需的任何类型的身份验证,比如用户名或电子邮件)
授权
用户激活(可选)
组和组权限
“记住我”
用户暂停
登录节流(可选)
禁止用户
密码重置
用户数据
接口驱动 – 转出自己的实现的意愿

安装:
安装 Sentry 是很容易的。以下步骤为其于Laravel 4进行安装:
1. Composer 修改composer.json,添加后,在命令行模式下执行 composer update 。

{
    "require": {
        "cartalyst/sentry": "2.1.*",
    },
    "minimum-stability": "stable"
}

2、Service Provider ,打开 app/config/app.php ,添加服务提供商。

'Cartalyst\Sentry\SentryServiceProvider',

3、Alias 打开 app/config/app.php ,下面的添加到类的别名列表。

'Sentry' => 'Cartalyst\Sentry\Facades\Laravel\Sentry',

4. Migrations 迁移
带有它自己的文件迁移,为了让您能够运行这些迁移成功,你需要对你的Laravel4应用程序默认的数据库连接设置,一旦你有一个设置,你可以运行下面的命令来运行迁移:

php artisan migrate --package=cartalyst/sentry

随意编写自己的迁移而插入正确的表,如果你想!
5、Configuration 构造
安装完成后,您可以发布包配置文件到您的应用程序,通过运行以下命令:

php artisan config:publish cartalyst/sentry

这将发布配置文件,app/config/packages/cartalyst/sentry/config.php 你修改程序包配置。

Permissions 权限
“minimum-stability”: “stable” (“最低稳定”:“稳定”)

引入Sentry,认证用户将是一件轻而易举的事!所有您需要做的是使用Sentry的验证的方法来检查用户的凭据是正确的。下面是一个示例代码将做到这一点:

$credentials = array(
    'email' => 'test@example.com',
    'password' => 'test',
);
// Try to authenticate the user
$user = Sentry::authenticate($credentials, false);
If($user){ echo "You are logged in!"; }

我们已经通过服务提供商加载了Sentry,可以直接使用。验证用户的身份,我们需要提供一个数组电子邮件和密码。

建立我们的用户部分

@if(Sentry::check())
| Welcome !
@endif

使用 Sentry::check() 方法检查是否登录,它会确保用户登录这样的链接将只显示给登录的用户。此处是登录后显示欢迎语。

用户注册路由:

Route::get('register', array('as' => 'postregister', 'uses' => 'pages@register'));
Route::get('myaccount', array('as' => 'myaccount', 'uses' => 'pages@myaccount'));

控制器:

function register()
{
if(Sentry::check()){
return Redirect::to('myaccount');
}
return View::make("user.register")->with("title","The Foldagram -Register")
->with("page_title","Register")->with('class','register');
}

我们检查用户是否已经登录,如果是我们将用户重定向到我的帐户页面。如果用户不登录,那么我们就从用户加载我们的注册页面中。
下一步是将用户保存到我们与哨兵的数据库。下面是代码:

$user = Sentry::createUser(array(
    'email' => Input::get('email'),
    'password' => Input::get('password'),
    'metadata' => array(
        'first_name' => Input::get('first_name'),
        'last_name' => Input::get('last_name'),
    )
));

Sentry 有一个CreateUser方法,使我们能够发送,这将是数组保存到我们的数据库。Sentry 便会自动将密码字段生成一个哈希值给我们。
现在,我们需要发送欢迎电子邮件给用户。我们将使用Laravel的内置邮件类来发送电子邮件。下面是该代码:

Mail::send('emails.welcome', $data, function($message)
{
    $message->to(Input::get('email'))->subject('Welcome to the Foldagram!');
});

用户登录
正如我们已经设置了用户注册,它的时间我们可以设置用户登录。我们需要允许用户通过我们的登录页面登录。因此,这里的注册我们的路线登录页面:

public function getLogin()
{
if(Sentry::check()){
return Redirect::to('myaccount');
}
return View::make("pages.login")->with("title","The Foldagram -Login")
->with("page_title","Login")->with('class','login');
}

收到登录处理:

function postLogin()
{
$rules = array(
'email' => 'required|email',
'password' => 'required',
);
$input = Input::get();
$validation = Validator::make($input, $rules);
if ($validation->fails())
{
return Redirect::to_route('userlogin')->with_errors($validation->errors)->with_input();
}
}

在这里,我们如果电子邮件和密码提供,还检查是否电子邮件的格式是否正确使用Laravel的内置Validator类。如果它是不正确的,我们要发送的用户返回到登录页面。
让我们来检查用户的凭据正确使用下面的代码:

$credentials = array( 'email'=> Input::get('email'), 'password'=>Input::get('password') );
if (Sentry::authenticate($credentials, false))
{
return Redirect::to('myaccount')
}
else
{
return Redirect::to('login')->with("error", "There is problem with
login please try again");
}

我们在这里,如果用户正在使用Sentry’s的authenticate认证检查方法,如果用户通过验证后,我们派出的用户到我的帐户页面。
用户仪表板
路由:

Route::get('myaccount', array('as' => 'myaccount', 'uses' => 'pages@myaccount'));

控制器:

public function getMyaccount()
{
if(!Sentry::check()){
return Redirect::to('login')->with("error", "Please login to access your account");
}
$user = Sentry::getUser();
return View::make("pages.myaccount")->with("title","The Foldagram - My Account")
->with("page_title","My Account")->with('class','myaccount')
->with('user',$user);
}

我们确保已经登录的用户中时,他正在存取我的帐户控制方法,然后我们将获取当前登录用户的对象,这样我们就可以在视图页面显示用户信息。
在这里,我们首先有一个包含在我的配置文件选项卡中的选项卡控制器打开状态。而我们是通过控制器使用我们发送的用户对象填写各字段的值。现在让我们写来更新的信息的方法我的个人资料选项卡。

Laravel 4 –The Foldagram 模板创建笔记

Preparing the schema (准备架构)

通常,实体模型可以在用纸或通过软件建立。实体模型有两个主要优点:它提供了设计者如何设计网页的某些元素一个粗略的想法。它也有助于在处理的变化,一般都在客户端不有样机。你会开发出很多东西,但客户会问了很多因为他们不知道它是如何变成小的变化。

因此,让我们准备一个数据库,我们目前的冲刺,同时设计师将对我们的第一个冲刺的设计。 Laravel4 为我们提供了迁移管理我们的数据库。迁移是管理你的数据库版本。为数据库中的每一个变化,你将准备一份迁移文件,该文件将举行具体是什么,我们正在改变我们的数据库。它也将存储又该发生,如果我们想撤销该数据库的变化,就会变得容易。

这是在敏捷项目中特别有用,因为我们不断地重复,并且变化一个项目的一部分。当我们试着来管理我们在短跑项目中,我们可以部署数据库变化快的在客户现场或示范区分期/直播服务器。这消除了手动与数据库操作,你将被保存由一个字段你往往会在部署往往错过。这是因为迁移文件保存所有更改的信息。 Laravel管理迁移文件,以便您可以瞬间恢复或更改应用到你的项目中。

让我们来看看如何使用迁移。要创建一个新的迁移文件,则可以使用从你的项目根目录,这将产生一个迁移文件命令artisan 用正确的类信息:

make create_users_table --table=users --create

迁移文件会在 app\database\migrations\ 生成 2014_03_12_115430_create_users_table.php,表名为users。
Laravel为我们提供了Schema类管理所有与数据库相关的工作,如创建或删除表格以及将字段添加到现有的表。

public function up()
{
Schema::create('users', function(Blueprint $table) {
$table->increments('id');
$table->string('username','12');
$table->string('password','16');
$table->string('email','40');
$table->string('phone','12')->nullable();
$table->string('name','40');
$table->boolean('blocked')->default(0);
$table->timestamps();
});
}

现在,我们可以运行 artisan 命令:

$ php artisan migrate

这将运行所有迁移文件,并创建表或指定的其他数据库的变化在迁移文件。在我们的例子中,该命令将创建用户表与我们指定的列。

如果我们想回滚我们的迁移是什么?

$ php artisan migrate:rollback

现在,在我们的例子中,上面的命令会删除该表的用户从数据库,正如我们在down方法中指定。
你可能会认为这是大量的工作。为什么我们不能只是直接建立数据库表通过MySQL或PHPMyAdmin的?好吧,假设你有多个团队成员并且都有所必需的代码不同的表。那么你怎么了管理数据库?或者,想象你已经部署你的项目,你正在从事的项目的第二个版本。你可以不记得每次更改你使数据库。因此,最好创建迁移文件并运行它们时,你在生产中部署你的代码。

Laravel还提供了一个 Seeder 类,这使我们能够 seed 数据到我们的表中。这将成为非常重要的,因为你可以将数据插入到表中,只要你想测试你的应用程序,或当你没有后台,你要开始有一些类型的数据到你的表。

Laravel 还包含一个简单的方式通过填充类使用测试数据填充您的数据库。所有的填充类都存放在 app/database/seeds 目录下。填充类可以以形式命名,但最好遵循一些合理的约束,比如 UserTableSeeder 等。默认情况下,一个DatabaseSeeder 类已为您定义。在这个类中,您可以使用 call 函数运行其他填充类,允许您控制填充顺序。

$hashed = Hash::make('secret');
DB::table('users')->insert(array(
	array('username'=>'James','email' =>'james@gmail.com','password'=>$hashed),
	array('username'=>'Steve','email' =>'stever@yahoo.com','password'=>$hashed)
));

这将运行我们的种子文件并插入两条记录到数据库中。如果你注意小心,我们正在使用Hash::生成我们的加密密码。

查询生成器为操作数据库提供了一个方便,顺畅的的接口,它支持所有Laravel支持的数据库系统,并能够完成绝大部分查询任务。
参考:http://www.golaravel.com/docs/4.1/queries/

{{ HTML::style('css'/bootstrap.css') }}
{{ HTML::style('css'/style.css') }}
{{ HTML::style('css'/slider.css') }}
{{ HTML::script('js'/slider.js') }}

使用HTML::style 和 HTML::script 从public目录中获取 css 和 javascript 文件。你应该使用它们,这样你就不必手动编辑如果路径中的项目位置的变化,或者当您上传您的应用程序,让它可用。
URL::asset 访问图片到 images’/inner-folder.png
URL::to(‘/’) 将返回我们的应用程序的主页的URL。生成一个完全自定义的a标签。

  • "Create Foldagram
  • {{ link_to_route('pcredit', 'Purchase Credits') }}
  • {{ link_to_route('cart', 'Cart') }}

link_to_route() helper方法会产生正确的URL来,我们作为参数传递的路线。
我们使用的URL辅助函数URL::Asset 为管理公共目录的路径。如果你正在建立一个模板,总是切记不要使用绝对路径。
使用Laravel辅助函数来管理路径。所以,当你要移动位置,您不必担心路径。
管理我们的顶部导航,我们使用的是link_to_route 帮手。这管理导航链接,通过把路由器的正确道路,我们不必须手动把我们的页面的路径。这又是一个优雅的解决方案管理路径。

@yield('inner-banner')
" @yield('content')

yield 是用来使其他页面可以覆盖此节。 inneri-banner 是动态部分的内页。
这是没有必要有部分页面延伸的主要布局。内容将是主要部分和页面的主要内容。
{{ $title }} 设置、 在 {{ $class }} 在body标签使用的是你可以用于添加一个类,它允许您根据添加自定义CSS 页面。一般情况下,你将通过这个类与其他数据通过路由或当你调用视图控制器。

现在,模板的主要部分就是 @yield(‘content’) 被写入。在这点,从另一个视图中的内容部分将被渲染。让我们来看看究竟如何这个过程的工作。首先,我们将创建视图为我们的主页。届时,我们将创建内容部分和延伸主模板。所以,我们的主视图会
在app/views/home.blade.php。

@extends('layouts.default')
@section('content')
......
@stop

正如我们可以从源代码中看到的,我们使用@extends,将从布局目录继承默认布局。

Route::get('/', function()
{
return View::make('home')->with('title','The Foldagram')->with('class','home');
});

传递 title 和 class ,用于页面标题和body的样式名。

对于代码的滑块部分,我们使用的是Flexslider,http://flexslider.woothemes.com/
一旦你包括FlexsliderJS/ CSS代码中的,所有你所要做的就是创建一个无序div容器、列表。
设置内页,所有我们需要做的就是建立内部的旗帜部分有适当的标记,从而使页面看起来按照设计。

用户订阅我们的网站。我们已经在形成一个码模板的通讯部分,它由下式给出:

"
" {{ Form::open(array('url' => 'subscribe')); }} {{ Form::label('something', 'Sign Up for Our Newsletter and Updates!'); }} {{ Form::text('email', '', array('class' => 'input- large', 'placeholder' => '')); }} {{ Form::submit('Subscribe'); }} {{ Form::close(); }}

Form::open 生成 form 标签,并使用post方式。我们创建路由处理:
Route::post(‘/subscribe’, function(){…}

在这里,我们的路线文件将收到的认购路线POST请求。首先,我们将检查与验证对象的电子邮件字段不为空和电子邮件格式是有效的。如果验证通过,那么我们将存储电子邮件通过订阅雄辩对象的认购表。所以,让我们创建一个雄辩模型为我们的订阅表。

错误消息 & 视图

return Redirect::to('/')
	->withInput() //实现重定向,仍然有提交前填写的数据
	->withErrors($validation)
	->with('message', 'There were validation errors.');

如果你需要关联持久用户提交的信息的操作和重定向操作,可以使用如下的链式调用的方法:return Redirect::to(‘form’)->withInput();

如果验证失败,你可以从验证器中获取错误消息。
$messages = $validator->messages();

注意当验证失败,我们使用 withErrors 函数把 Validator 实例传递给 Redirect。这个函数将刷新 Session 中保存的错误消息,使得它们在下次请求中可用。
要特别注意的是,对于每个请求,一个 $errors 变量在所有视图中总是可用的,允许你方便的认为 $errors 变量总是被定义并可以安全使用的。
首先,我们将检查与验证对象的电子邮件字段不为空和电子邮件格式是有效的。如果验证通过,那么我们将存储电子邮件通过订阅Eloquent 对象的订阅表。所以,让我们创建一个Eloquent模型为我们的订阅表。

小提示:
Eloquent是Laravel的(ORM封装)对象关系映射器包装。它的数据库表映射到类和数据库表列作为类的属性,这使我们能够做的很该模型有用的东西,如保存,编辑和删除。

如果验证失败,我们需要在某个地方我们的模板打印这些错误。default.blade.php

@if ($errors->any())
    {{ implode('', $errors->all('
  • :message
  • ')) }}
@endif

这将打印通过验证对象接收到错误消息。

所以首先,我们需要添加一个模型箱。这将需要在每一页作为用户可以从任何页面创建Foldagram。为了做到这一点,我们将创建一个子视图,然后我们将包括子视图在我们的默认模板。因此,让我们创建我们的子视图在app/views/Foldagram.blade.php

在本章中,我们学习了如何才能建立一个项目Laravel,怎么模板系统的工作原理,以及如何利用Laravel的结构来创建Web应用程序。我们开始与迁移,并创建基本的迁移为我们Foldagram项目。我们学会了如何准备架构,以及我们如何能够播种数据库。接下来,我们学会了如何设置布局和刀片模板管理动态我们的网页的部分。后来,我们创建了我们的时事通讯和Foldagram形式Foldagram应用。

单词本:
any 任何
implode 集中
Blueprint 蓝图、图纸

其他:
php -> => 的问题
=> 是数组成员访问符号
-> 是对象成员访问符号
PHP 中的 数组 实际上是一个有序映射。映射是一种把 values 关联到 keys 的类型。因此可以把它当成真正的数组,或列表(向量),散列表(是映射的一种实现),字典,集合,栈,队列以及更多可能性。由于数组元素的值也可以是另一个数组,树形结构和多维数组也是允许的。

Example #1 一个简单数组

  "bar" ,
     "bar"  =>  "foo" ,
);

// 自 PHP 5.4 起
$array  = [
     "foo"  =>  "bar" ,
     "bar"  =>  "foo" ,
];
?> 

最后一个数组单元之后的逗号可以省略。通常用于单行数组定义中,例如常用 array(1, 2) 而不是 array(1, 2, )。对多行数组定义通常保留最后一个逗号,这样要添加一个新单元时更方便。
它接受任意数量用逗号分隔的 键(key) => 值(value) 对。

每个类的定义都以关键字 class 开头,后面跟着类名,后面跟着一对花括号,里面包含有类的属性与方法的定义。
类名可以是任何非 PHP 保留字的合法标签。一个合法类名以字母或下划线开头,后面跟着若干字母,数字或下划线。以正则表达式表示为:[a-zA-Z_\x7f-\xff][a-zA-Z0-9_\x7f-\xff]*。
一个类可以包含有属于自己的常量,变量(称为“属性”)以及函数(称为“方法”)。

Example #1 简单的类定义

 var ;
    }
}
?> 

laravel 创建表单

先看一个完整的表单,取自 learninglaravel2.pdf ,学习leravel的教程,官网:http://learninglaravel.net/

@extends('layout')
@section('content')
	

Contact Us.

Please contact us by sending a message using the form below:

{{ Form::open(array('url' => 'contact')) }} {{ Form::label('Subject') }} {{ Form::text('subject','Enter your subject') }}
{{ Form::label('Message') }} {{ Form::textarea('message','Enter your message') }}
{{ Form::submit('Click Me!') }} {{ Form::close() }} @stop 所生成的html内容如下:


Laravel框架会自动在用户 session 中存放一个随机令牌(token),并且将这个令牌作为一个隐藏字段包含在表单信息中。
下面是组成表单的各个元素,基于Blade模板,请添加{{}}括号:
使用 Form::open() 创建表单,此方法只接受一个数组。例:

{{ Form::open(array('url' => 'contact')) }}

我们使用 URL 索引,值是我们路由上要链接到的。可以看到上面,我们的目标是 /contact 并默认使用 POST 方法。
使用 Form::close() 关闭表单。也可以使用 >/form< 来关闭。
标签生成:
Label 标签:

{{ Form::label('E-Mail')
//生成:
{{ Form::label('email', 'E-Mail Address')
//生成:
{{ Form::label('email', 'E-Mail Address', array('class' => 'awesome'));
//生成:

文本框:

{{ Form::text('username') }}
//生成:

包含默认值的方本框:

{{ Form::text('email', 'example@gmail.com') }}
//生成:

密码框:

{{ Form::password('password') }}
//生成:

包含默认值的多行文本区域:

{{ Form::textarea('message','Enter your message') }}
//生成:

隐藏域:

{{ Form::hidden('message','hello world') }}
//生成:

多选框:

{{ Form::checkbox('name', 'value') }}
//生成:

已选中的多选框:

{{ Form::checkbox('name', 'value', true); }}
//生成:

单选框:

{{ Form::radio('name', 'value') }}
//生成:

已选中的单选框:


文件上传框:

{{ Form::file('image') }}
//生成:

下拉菜单:

{{ Form::select('size', array('L' => 'Large', 'S' => 'Small')) }}
生成:

已选中默认值的下拉菜单:

{{ Form::select('size', array('L' => 'Large', 'S' => 'Small'), 'S') }}
//生成:

分组下拉菜单:

{{ Form::select('animal', array(
    'Cats' => array('leopard' => 'Leopard'),
    'Dogs' => array('spaniel' => 'Spaniel'),
)) }}
//生成:

可取值范围的下拉菜单:

{{ Form::selectRange('number', 10, 20) }}
//生成:

生成月份名称列表:

//{{ Form::selectMonth('month') }}
生成:

提交按钮:

{{ Form::submit('Click Me!') }}
生成:

注意: 如果需要创建一个单独的表单元素,可以使用 button 方法。它的调用方式和 submit 方法一样。

Laravel Eloquent ORM 小记

Laravel 提供非常棒的 ORM:Eloquent,遵循数据库交互的 ActiveRecord ORM 风格。遵循标准的ORM模型:表映射到记录,记录映射到对象,字段映射到对象属性。配合遵循的命名和配置惯例,能够很大程度的快速实现模型的操作,而且简洁易懂。

Eloquent 有多种约定,一个是使用模型的复数形式作为模型的数据库表。您可以在模型中定义一个 table 属性来指定一个自定义的表名:

class User extends Eloquent {
    protected $table = 'my_users';
}

注意: Eloquent 将假设每张表有一个名为 id 的主键。您可以定义 primaryKey 属性来覆盖这个约定。同样,您可以定义一个 connection 属性来覆盖在使用这个模型时所用的数据库连接。

模型通常存放在 app/models 目录。让我们在该目录定义个 User.php 模型,如:

class User extends Eloquent {}

此时,对应使用的表是users。

我们将使用 Eloquent 取得它们并传递到视图中。现在我们修改我们 /users 路由如下:

Route::get('users', function()
{
    $users = User::all();

    return View::make('users')->with('users', $users);
});

首先,User 模型的 all 方法将会从 users 表中取得所有记录。接下来,我们通过 with 方法将这些记录传递到视图。with 方法接受一个键和一个值,那么该值就可以在视图中使用了。

转换一个模型和它加载的关系为一个数组,您可以使用 toArray 函数:

$user = User::with('roles')->first();
return $user->toArray();

转换一个模型为JSON字符串,您可以使用 toJson 函数:

return User::find(1)->toJson();

注意:当一个模型或集合转换为一个字符串,它将转换为JSON,这意味着您可以直接从应用程序的路由中返回 Eloquent 对象!

有时您可能希望限制包含在模型数组或JSON中的属性,比如密码,为此,在模型中添加一个隐藏属性:

从数组或JSON转换中隐藏属性

class User extends Eloquent {
    protected $hidden = array('password');
}

参考:http://www.golaravel.com/docs/4.1/eloquent/

Laravel 建立数据库小记

首先,我们配置数据库连接。你可以在 app/config/database.php 文件配置所有数据库连接信息。

然后我们将使用Artisan和Migrations工具来建立数据库,你可以简单的把它理解为一个数据库工具,在使用它之前我们需要初始化它。

在项目根目录中,在终端中执行以下命令:

php artisan migrate:make create_users_table

然后,找到生成的迁移文件位于 app/database/migrations 目录,又当前日期为名。该文件包含了一个包含两个方法: up 和 down 的类。在 up 方法,你要指名数据库表的修改,在 down 方法中你只需要移除它。

public function up()
{
    Schema::create('users', function($table)
    {
        $table->increments('id');
        $table->string('email')->unique();
        $table->string('name');
        $table->timestamps();
    });
}

public function down()
{
    Schema::drop('users');
}

然后,我们在项目根目录中使用终端运行 migrate 命令来执行迁移:

php artisan migrate

上面这种情况在创建时,已在数据库中新建了users表。

有些时候,数据库多个表时,创建时,可以分步操作。

1、在工程根目录下执行:php artisan migrate:install,在数据库中创建了一张名为laravel_migrations的表,它记录了migrate需要的数据。
2、然后运行下面命令,创建表,每条对应一张表:

php artisan migrate:make create_admin_table
php artisan migrate:make create_docs_table

运行成功之后,我们可以在application/migrations目录看到名为日期_creat_admin_table.php和日期_creat_docs_table.php两个文件。
3、分别打开创建的文件,在up和down方法中添加代码。
在日期_creat_admin_table.php中:

	public function up()
	{
		Schema::create('admin',function($table)
		{
			$table->increments('id');
			$table->string('email',64);
			$table->string('password',64);
		 });
		 DB::table('admin')->insert(array(
							'email'=>'your email',
							'password'=>Hash::make('your password'),
						));
	}
	public function down()
	{
		Schema::drop('admin');
	}

在日期_creat_docs_table.php中

public function up()
{
    Schema::create('docs',function($table)
    {
        $table->increments('id');
        $table->string('title',64);
        $table->text('content');
        $table->string('create_date',12);
        $table->string('last_change',12);
    });
     DB::table('docs')->insert(array(
                        'title'=>'test',
                        'content'=>'just a test!',
                        'create_date'=>time(),
                        'last_change'=>''
                    ));
}
public function down()
{
    Schema::drop('docs');
}

4、保存完毕之后我们继续运行命令:php artisan migrate
注:php artisan migrate 会对目录下的所有文件进行处理,请删除无用的文件,免得出现错误。

5、当看到如下所示时,就证明网站的数据库建好了。

Migrated: 2014_02_15_070223_create_admin_table
Migrated: 2014_02_15_070241_create_docs_table

我们还插入了两条数据方便我们测试。

参考:
http://www.golaravel.com/docs/4.1/quick/#index
http://yancjie.blog.163.com/blog/static/2009290172012811113459690/

初探 Laravel Blade模板

介绍:Blade是Laravel框架下的一种简单又强大的模板引擎。Blade 非常快,因为仅使用了少量的正则表达式来为你的模板编译成原始PHP代码。不同于控制器布局,Blade模板引擎由模板继承和模板片段驱动。所有的Blade模板文件必须使用Blade .blade.php 文件扩展名。

先定义布局,再使用布局。

先创建 layout.blade.php 文件:


    
        

Laravel Quickstart

@yield('content')

接着, 我们创建 users.blade.php 视图:

@extends('layout')

@section('content')
    Users!
@stop

我的大体理解是 users.blade.php 继承 layout.blade.php,是后者的扩展视图。
公共的模块,如侧边栏、底部信息的内容可以放到 layout.blade.php 中。示例代码如下:


    
        

Laravel Quickstart

@section('sidebar') This is the master sidebar. @show @yield('content') @section('footer') This is the master footer. @show

通过在模板片段中使用 @parent 指令,布局的内容可以被包含在一个子视图中。

@extends('layout')
@section('sidebar')
    @parent
    

This is appended to the master sidebar.

@stop

达到的效果就是访问users在sidebar内容中添加This is appended to the master sidebar.

有时候使用一个模板片段时,不知道是否已定义,可以设置一个默认值传递给@yield 指令,把默认值作为第二个参数:@yield('section', 'Default Content')

示例:


    
        

Laravel Quickstart

@yield('section', 'Default Content')

当使用 Blade 时,你可以使用两个花括号来输出数据。非常简单,你现在应该可以通过 /users 路由来查看到用户姓名作为响应输出。

@extends('layout')

@section('content')
    @foreach($users as $user)
        

{{ $user->name }}

@endforeach @stop

参考:http://www.golaravel.com/docs/4.1/templates/#blade-templating

windows xp 安装 php Laravel 框架

Laravel框架使用 Composer 执行安装和依赖管理。如果还没有安装的话,现在就开始 安装 Composer 吧。

找到“Windows Installer”下,下载“Composer-Setup.exe”进行安装,安装过程中选择php.exe文件。建议先安装xampp,选择D:\xampp\php下的。

安装Composer之后,你就可以通过命令行进到指定目录下使用如下命令安装Laravel了:

composer create-project laravel/laravel your-project-name

注:

(1)your-project-name 自定义名称
(2)命令行下进入指定目录,xp系统可以安装“右键管家”,打开后选择“增加菜单”,常用右键,勾选“在此处打开命令窗口”,增加到文件夹右键。
(3)若出现“You must enable the openssl extension to download files via https”,需要在php.ini中开启openssl:找到“extension=php_openssl.dll”,去掉前面的;号。

或者,你可以从 Github仓库 下载。接下来,在 安装Composer 之后,在项目根目录下执行 composer install命令。该命令将会下载以及安装框架的依赖组件。

安装完成后,配置本地虚拟目录,有一点要注意需要指到public目录下:
DocumentRoot “D:/xampp/htdocs/laravel/qianduan/public”

配置完成后,打开浏览器访问时当看到,laravel的标志及“You have arrived.”(你已经到了。),证明已经安装成功了。

参考:http://www.golaravel.com/docs/4.1/quick/#index