: jank : : 6318 : 2016-07-26 10:09 php
<?php
laravel
首先安装好composer,注:composer需要使用普通用户安装
1.下载composer:“curl -sS https://getcomposer.org/installer | php”如果报错则使用’php -r "readfile('https://getcomposer.org/installer');" | php‘,把下载好的composer.phar文件mv ./composer.phar /usr/local/bin/composer 方便全局调用,直接composer不需要php oomposer.phar 来执行命令。
2.使用composer 下载laravel:‘ composer global require "laravel/installer=~1.1" ’。
3.把普通用户目录下的‘.composer/vendor/bin’路径放在/etc/profile中的path上,使得laravel可以直接当做命令执行。
4.laravel new blog 创建一个名为blog的laravel框架
5.进入blog下的public 执行 php -S 0.0.0.0:1024
6.打开网站:ai.jankl.com:1024 如果出现laravel界面说明安装成功
7.修改blog目录下的隐藏配置文件.evn 修改其中的mysql配置
8.创建用户首先执行:php artisan make:auth,
9.执行命令:php artisan migrate 进行数据迁移,在blogs数据库中创建了三张表:migrations,password_resets,users
10.进入网页注册用户将会在数据库blogs中出现users表并有新的用户写入
11. 一。使用laravel中的migration创建数据表 php artisan make:migration create_articles_table
二。在database/migrations/新建的文件 中的up方法中加入:
Schema::create('articles', function(Blueprint $table)
{
$table->increments('id');
$table->string('title');
$table->text('body')->nullable();
$table->integer('user_id');
$table->timestamps(); //注:默认必须加
});
三。php artisan migrate
12.使用artisan生成Seeder
Seeder 是我们接触到的一个新概念,字面意思为播种机。Seeder 解决的是我们在开发 web 应用的时候,需要手动向数据库中填入假数据的繁琐低效问题。
php artisan make:seeder ArticleSeeder
1.我们会发现 learnlaravel5/database/seeds 里多了一个文件 ArticleSeeder.php,修改此文件中的 run 函数为:
public function run()
{
DB::table('articles')->delete();
for ($i=0; $i < 10; $i++) {
AppArticle::create([
'title' => 'Title '.$i,
'body' => 'Body '.$i,
'user_id' => 1,
]);
}
}
2.修改database/seeds/DatabaseSeeder.php 中的 run 函数为:
public function run()
{
$this->call(ArticleSeeder::class);
}
3.由于 database 目录没有像 app 目录那样被 composer 注册为 psr-4 自动加载,采用的是 psr-0 classmap 方式,所以我们还需要运行以下命令把 ArticleSeeder.php 加入自动加载系统,避免找不到类的错误:
composer dump-autoload 注:非root用户执行
4.執行php artisan db:seed
dd()函数是laravel自定义的打印函数,注一个方法中只能使用一次,并且后面的不执行。
2016 10/10
中间件
1.作用: 除身份验证,中间件也可以被用来执行各式各样的任务,CORS 中间件负责替所有即将离开程序的响应加入适当的响应头,一个日志中间件可以记录所有传入应用程序的请求。
Laravel 框架已经内置一些中间件,包括维护、身份验证、CSRF 保护,等等。所有的中间件都位于
app/Http/Middleware 目录内。 HTTP 请求在实际碰触到应用程序之前,最好是可以层层通过许多中间件,每一层都可以对请求进行检查,甚至是完全拒绝请求。
2.新建中间件:php artisan make:middleware HomeMiddleware
注意:php -v 查看当前php版本是否大于5.9,laravel5.1要求
控制器
1.控制器可将相关的 HTTP 请求处理逻辑组成一个类。控制器通常存放在 app/Http/Controllers 此目录中。
2.创建控制器:php artisan make:controller HomeController
3.控制器使用中间件的两种方法:
1.在路由中配置:
Route::get('article', [
'middleware' => 'auth',
'uses' => 'UserController@article'
]);
2.在控制器自动加载函数中配置:
public function __construct()
{
$this->middleware('auth');
$this->middleware('log', ['only' => ['fooAction', 'barAction']]);
$this->middleware('subscribed', ['except' => ['fooAction', 'barAction']]);
}
4.restful资源控制器
Route::resource('photo', 'PhotoController');
有如下几种自带函数:
动词 路径 行为 路由名称
GET /photo 索引 photo.index
GET /photo/create 创建 photo.create
POST/photo 保存 photo.store
GET /photo/{photo} 显示 photo.show
GET /photo/{photo}/edit 编辑 photo.edit
PUT/PATCH /photo/{photo}更新 photo.update
DELETE /photo/{photo} 删除 photo.destroy
请求
1.取得输入数据
取得特定输入数据
例:
use IlluminateHttpRequest; //使用Request时需添加
public function article(Request $request){
$name = $request->input('name', 'jank');//接收name,默认值为jank
if($request->has('name')){//判断是否有输入数据
echo $request->input('name');
}
$all = $request->all();//取得所有输入数据
//取得部分发出请求时传入的输入数据:
$input = $request->only('username', 'password');
$input = $request->except('credit_card');
//如果是「数组」形式的输入数据,可以使用「点」语法取得数组:
$input = $request->input('products.0.name');
//flash 方法会将当前的输入数据存进 session中,所以下次用户发出请求时可以使用保存的数据:
Request::flash();
//将部分输入数据存成一次性 Session
Request::flashOnly('username', 'email');
Request::flashExcept('password');
//快闪及重定向
// 你很可能常常需要在重定向至前一页,并将输入数据存成一次性 Session。只要在重定向方法后的链式调用方法中传入输入数据,就能简单地完成。
return redirect('form')->withInput();
return redirect('form')->withInput(Request::except('password'));
//若想要取得前一次请求所保存的一次性 Session,你可以使用 Request 实例中的 old 方法。
$username = Request::old('username');
//如果你想在 Blade 模板显示旧输入数据,可以使用更加方便的辅助方法 old :
{{ old('username') }}
}
2.Cookie
SymfonyComponentHttpFoundationCookie 实例。可以在 Response 实例之后连接 withCookie 方法带入 cookie 至响应:
$response = new IlluminateHttpResponse('Hello World');
$response->withCookie(cookie('name', 'value', $minutes));//设置cookie
$response->withCookie(cookie()->forever('name', 'value'));//设置永不过期的cookie
3.上传文件
//上传页面
public function upfile(){
return view('upfile');
}
<html>
<head>
<title>
上传文件
</title>
</head>
<body>
<form action="upfiles" method="post" enctype="multipart/form-data">
<input type="file" name="filefield">
<input type="hidden" name="_token" value="{{ csrf_token() }}" />
<input type="submit">
</form>
</body>
</html>
//上传方法
public function upfiles(){
$file = Request::file('filefield');
$clientname = $file -> getClientOriginalName(); //获取上传文件名
$houzhui = $file->getClientOriginalExtension(); //获取上传文件后缀
echo $houzhui;
$path = $file->move("./", $clientname);
}
//配置路由
Route::get('upfile', 'HomeController@upfile');
Route::post('upfiles', 'HomeController@upfiles');
4.其他请求
1.取得请求url
$url = Request::path();
$url = Request::url();
2.判断一个请求是否使用了ajax
if(Request::ajax()){
echo '该请求使用了ajax';
}
3.判断请求方法
if(Request::isMethod('post')){
echo '该请求方法为post';
}
4.取得请求方法
$method = Request::method();
5.确认请求路径是否符合特定格式
if (Request::is('admin/*'))
{
echo '当前请求符合特定格式';
}
CRUD方法:
1.新建
//上传信息
$ok = DB::table('coments')->insert(['user_name' => 'jank', 'age' => 23]);
//上传信息,并返回行id
$id = DB::table('coments')->insertGetId(['user_name' => 'jank', 'age' => 23]);
//一次上传多列信息
$ok = DB::table('coments')->insert(
['user_name' => 'jank', 'age' => 23],
['user_name' => 'jank1', 'age' => 23],
['user_name' => 'jank2', 'age' => 23]
);
2.修改
//修改一个列
DB::table('coments')->where('id', 1)->update(['age' => 22]);
//自增或自减一个字段的值
DB::table('users')->increment('age');
DB::table('users')->increment('age', 5);
DB::table('users')->decrement('age');
DB::table('users')->decrement('age', 5);
//也能够同时指定其他要更新的字段:
DB::table('users')->increment('age', 1, ['name' => 'John']);
3.删除
//删除数据表中的数据
DB::table('coments')->where('age', '>', 132)->delete();
//删除数据表中的所有数据
DB::table('coments')->delete();
//清空数据表
DB::table('coments')->truncate();
4.查询
//get所有数据
DB::table('coments')->get();
//从数据表中取得单一数据列
$user = DB::table('users')->where('name', 'John')->first();
var_dump($user->name);
//从数据表中取得单一数据列的单一字段
$name = DB::table('users')->where('name', 'John')->pluck('name');
//取得单一字段值的列表,得到数组
$roles = DB::table('roles')->lists('title');
//指定查询子句 (Select Clause)
$users = DB::table('users')->select('name', 'email')->get();
$users = DB::table('users')->distinct()->get();
$users = DB::table('users')->select('name as user_name')->get();
//增加查询子句到现有的查询中
$query = DB::table('users')->select('name');
$users = $query->addSelect('age')->get();
//使用 where 及运算符
$users = DB::table('users')->where('votes', '>', 100)->get();
//or」语法
$users = DB::table('users')
->where('votes', '>', 100)
->orWhere('name', 'John')
->get();
//使用 Where Between
$users = DB::table('users')->whereBetween('votes', [1, 100])->get();
//使用 Where Not Between
$users = DB::table('users')
->whereNotBetween('votes', [1, 100])->get();
//使用 Where In 与数组
$users = DB::table('users')->whereIn('id', [1, 2, 3])->get();
$users = DB::table('users')->whereNotIn('id', [1, 2, 3])->get();
//使用 Where Null 找有未配置的值的数据
$users = DB::table('users')->whereNull('updated_at')->get();
//排序(Order By)、分群(Group By) 及 Having
$users = DB::table('users')
->orderBy('name', 'desc')
->groupBy('count')
->having('count', '>', 100)
->get();
//偏移(Offset) 及 限制(Limit)
$users = DB::table('users')->skip(10)->take(5)->get();
//基本的 Join 语法
DB::table('users')
->join('contacts', 'users.id', '=', 'contacts.user_id')
->join('orders', 'users.id', '=', 'orders.user_id')
->select('users.id', 'contacts.phone', 'orders.price')
->get();
//Left Join 语法
DB::table('users')
->leftJoin('posts', 'users.id', '=', 'posts.user_id')
->get();
//你也可以指定更高级的 join 子句:
DB::table('users')
->join('contacts', function($join)
{
$join->on('users.id', '=', 'contacts.user_id')->orOn(...);
})
->get();
发表评论
public function store(){
$user = Request::input('user');
$body = Request::input('body');
$file = Request::file('filename');
$insert = "['user_name' => $user, 'body' => $body]";
if(!empty($file)){
$clientname = date('YmdHis') . '.' . $file -> getClientOriginalExtension();
$path = $file->move("./text", $clientname);
$filepath = "http://ai.jankl.com/blog/public/text/$clientname";
$jank = DB::table('coments')->insert(['user_name' => $user, 'body' => $body, 'photo' => $filepath]);
}else{
$jank = DB::table('coments')->insert(['user_name' => $user, 'body' => $body]);
}
}