Laravel 框架 基础(一)

时间:2022-07-01 03:28:44

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