Laravel 框架
laravel 5.2 在 5.1 基础上继续改进和优化,添加了许多新的功能特性:多认证驱动支持、隐式模型绑定、简化 Eloquent 全局作用域、可选择的认证脚手架、中间件组、访问频率限制、数组输入验证优化等等。
一、 Compose安装laravel
compose下载:http://www.phpcomposer.com/
环境要求:安装之前先确定您的环境是否是php5.4以上,最好是php7,推荐使用xampp。并且php要打开openssl。
安装laravel
改镜象,避免*:
composer config -g repo.packagist composer https://packagist.phpcomposer.com
新建项目
composer create-project laravel/laravel gwd --prefer-dist
二、目录介绍
这里不再详述了,请见官方文档。
三、路由起步(参数,连接符,默认值)
所有应用路由都定义在 App\Providers\RouteServiceProvider 类载入的 app/Http/routes.php 文件中。
最基本的 Laravel 路由接收一个 URI 和一个闭包:
Route::get('/', function () {
return 'Hello World';
});
代表 http://localhost/ 返回 Hello World,下面这个是post方法。
Route::post('add', function () {
//
});
也可以用以下方法:
Route::match(['get', 'post'], '/', function () {
//
});
Route::any('foo', function () {
//
});
结合控制器:
Route::get('/', "IndexController@lst");
分组:
Route::group(['prefix' => 'admin','namespace'=>'Admin','middleware'=>['web','admin.login']], function () {
//Route::get('login','IndexController@login');
Route::get('index','IndexController@index');
Route::resource('article', 'ArticleController');
});
参数:
Route::get('posts/{post}/comments/{comment}', function ($postId, $commentId) {
return $commentId;
});
默认值:
Route::get('posts/{post}/comments/{comment?}', function ($postId=0, $commentId=null) {
return $postId .'----'.$commentId;
});
资源路由:
Route::resource('article', 'ArticleController'); //生成n个方法
四、控制器
位于App\Http\Controllers
手动创建
<?php
namespace App\Http\Controllers;
class IndexController extends Controller{
public function index(){
return "welcome";
}
}
artisan 创建控制器:
php artisan make:controller UserController
控制器分组:有时候要把控制器进行分组,只需要在App\Http\Controllers下新文件夹,然后把控制器放进去。(需要改命名空间和use路径)
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Http\Requests;
class UserController extends Controller
{
public function index(){
return "你好";
}
//
}
五、视图
视图用的都是blade模板,位于view下面,有个示例文件welcome.blade.php。生产环境中只需要把模板拷到此处,重命名成blade.php。
控制器渲染模板
public function index()
{
return view('index');
}
如果模板上层还有文件夹,比如模板位于view/web/a.index.blade.php,view('web.index');
用“.”来连接。
public function index()
{
return view('web.index');
}
模板中只需要输出变量:<?php echo $data;?>
传参(单个):
public function index()
{
$data="你好";
return view('web.index')->with('data',$data);
}
传参(多个):只需要放数组是,然后作为第二个参数传给视图
public function index()
{
$data1="你好1";
$data2="你好2";
$data3="你好3";
$data=[
'data1'=>$data1,
'data2'=>$data2,
'data3'=>$data3
];
return view('web.index', $data);
}
compact传值:
public function index()
{
$data1="你好1";
$data2="你好2";
$data3="你好3";
$data=[
'data1'=>$data1,
'data2'=>$data2,
'data3'=>$data3
];
return view('web.index', compact('data','data1'));
}
模板中调用:<?php echo $data['data1'];?>
模板简单语法:
1、 单个变量{{$name}}
2、原样输出:
@{{$name}}
3、判断变量是否为空并作处理
{{$name or '姓名为空'}}
4、判断变量是否存在并作逻辑处理
{{isset($data1)?$data1:"不存在"}}
5、 转义 显示未转义的数据。在默认情况下,Blade 模板中的 {{ }} 表达式将会自动调用 PHP 的 htmlentities 函数,以避免 XSS 攻击。如果你不希望你的数据被转义,可以使用下列的语法:
{!!$str!!}
流程控制
@if($name>10)
大人
@else
小孩
@endif
除非--否则
@unless($name>10)
小孩
@endunless
for循环
@for($i=0;$i<10;$i++)
{{$i}}
@endfor
foreach
@foreach($data as $v)
{{$v}}
@empty
为空
@endforeach
while
@whiile(true)
你是真的
@endwhile
子模板
包含
@include(index)
@include('common.header',['page'=>'首页'])
被包含的
<div class="header">我是公共头部 - 您当前访问的页面是:{{$page}}</div>
嵌套
母版
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.header{height:100px;background: darkred}
.middle{height: 300px; background: lightblue}
.footer{height:100px;background: yellowgreen}
</style>
</head>
<body>
<div class="header">我是公共头部</div>
{{--@yield('content')--}}
@section('content')
<P>我是主模板里的内容</P>
@show
<div class="footer">我是公共底部</div></body>
</html>
子版
@extends('layouts.home')
@section('content')
@parent
<div class="middle">我是layouts区域的替换内容 XXXXXXXX</div>
@endsection