laravel

[TOC]

## 1. 创建一个新的laravel项目

**有两种方式创建一个新的Laravel 项目,两种方式都是从命令行执行的:第一种是通过全局的Laravel安装器,另一种是通过Composer的create-project命令**
这两种创建方式的前提都是已经安装了Composer

### 1.1 使用Laravel安装器安装

在命令行当中执行以下命令即可(如果已经安装过,他会自动更新); **(composer如果在命令行中任意目录都可以直接调用的前提是,添加全局环境变量---window,右键"计算机"->"属性"->"高级系统设置"->"高级"->"环境变量"->"path", 打开编辑,将composer所在的目录追加至path环境变量的值之后。)**

``` php
composer global require laravel/installer
// global 全局安装
// require 引入三方包
```

安装完成后,【想要在命令中任意目录使用laravel命令, 需将laravel安装器所在的目录, 设置为全局环境变量,laravel 安装的目录地址可以通过命令`` `composer config -l -g` ` `来查看】后续可以通过` ` `larave new(项目名称)` ``来创建新的Laravel项目。

``` php
laravel new laravel_project
```

### 1.2 使用`` `composer create-project` ``命令安装

``` php
composer create-project laravel/laravel project_name --prefer-dist
// project_name 项目名称
```

## 2. 配置开发环境

### 2.1 使用本地PHP
如果你在本地安装了PHP,并且你想使用PHP内置的服务器来为你应用程序提供服务,可以使用 Artisan命令 `` `serve` ` ` ,这个命令会在` ` `http://localhost:8000` `` 上启动开发服务器

``` php
php artisan serve
```

### 2.2 使用apache 服务或者Nginx服务器

将发布项目的根目录指向值 项目中的public目录,该目录下的`` `index.php` `` 文件将作为所有进入应用程序的HTTP请求的前端控制器

### 2.3 目录权限

安装完laravel后,需要给`` `storage` ` ` 和` ` `bootstrap/cache` ``目录设置读写权限。否则Laravel程序将无法运行。

## 3. 目录结构

**项目根目录**

* ```app 目录```  **包含你的程序的核心代码**
* ```bootstrap 目录``` **包含了框架的启动文件 app.php, 以及用于性能优化的框架生成的文件**
* ```config 目录``` **包含应用程序的所有配置文件。**
* ```database 目录``` **数据库存放目录**
* ```public 目录``` **它是进入应用程序的所有请求的入口**
* ```resources 目录``` **目录包含了视图和未编译的资源文件, 语言文件**
* ```routes 目录``` **包含应用程序的所有路由定义**
* ```storage 目录``` **包含由 Blade 框架生成的基于目录的模板、文件和缓存**
* ```tests 目录``` **自动化测试类**
* ```vendor 目录``` **包含你的 Composer 依赖。**

### 4. 框架基础

#### 4.1 路由
对任何一个web框架而言,通过HTTP协议处理用户请求并返回响应都是核心必备功能。第一个要紧的事情,就是要定义应用路由,否则,将无法与终端用户进行交互。
**在Laravel应用中,定义路由有两个入口,一个是 `` `routes/web.php` ` `,用来处理终端用户通过web浏览器直接访问的请求(url地址),另一个是` ` `routes/api.php` ``, 用于处理其他接入方的API请求(通常是跨语言、跨应用的请求)**

##### 4.1.1 基本路由

Laravel 框架为我们提供了相应的路由定义方法; 使用`` `Route::get` ` `匹配GET请求,` ` `Route::post` ` `匹配POST请求,` ` `Route::delete` ``匹配删除请求。
定义路由最简单的方法就是在`` `routes/web.php` ``中定义一个路径以及映射到该路径的操作。

``` php
Route::get($uri,$callback);
Route::post($uri,$callback);
Route::put($uri,$callback);
Route::patch($uri,$callback);
Route::delete($uri,$callback);
Route::options($uri,$callback);

```

``` php
Route::get('/hello',function(){
    return 'hello word';
})
Route::post('/test',function(){
    return 'test content';
});
```

有的时候呢,你可能需要注册一个或者多个HTTP的请求的路由。这个时候你可以使用`` `match` ` `方法。也可以使用` ` `any` ``方法注册一个实现响应所有http请求的路由。

``` php
Route::match(['get','post'],'/home',function(){
    return '123';
});
Route::any('/about',function(){
    return '123';
});
```

**注意:如果使用ajax发送请求时,并且路由是通过`` `any`  `或者` ` `match` ` `定义的路由地址的话,在ajax发送post请求时,在data参数中添加` ` `'_token': '{{csrf_token()}}'` ``, 否则,laravel的csrf验证会导致请求失败。**

``` js
 $.ajax({
     url: '/test',
     type: 'post',
     data: {
         '_token': '{{csrf_token()}}'
     },
     success: function(e) {
         // console.log(e);
         $('#list').html(e);
     },
     error: function(e) {
         console.log(e.status);
     }
 })
```

很多简单的 静态web站点通过这种最基本的路由定义就可以完成了, 比如宣传或官网,只有一个静态页面, 通过几个GET路由以及视图模板就OK了:

``` php
// 首页
Route::get('/', function () {
    return view('home');
});
// 关于我们
Route::get('/about', function () {
    return view('about');
});
// 产品页
Route::get('/products', function () {
    return view('products');
});
// 服务页
Route::get('/services', function () {
    return view('service');
});
```
##### 4.1.2 路由重定向
```php
Route::redirect('/about','/');
Route::redirect('/abc','/services');
```

##### 4.1.3 路由视图
如果你的路由只要返回视图,我们使用```Route::view()```方法,view方法接受一个URI作为第一个参数,一个视图名称作为第二个参数,第三个参数是可选参数,将一组数据传递给视图。
```php
Route::view('/joinus','joinus');
Route::view('/admin','admin/home',['name'=>'Husky','age'=>'18']);
```
##### 4.1.4 路由参数
<!-- http://www.baidu.com/a/b.html?username=123&pwd=324 -->
<!-- http://www.baidu.com/a/123/2345 -->
+ 必填参数
如果需要在路由中获取URL片段,比如从URL中获取用户id,我们可以定义路由参数:
```php
// 必选参数
Route::get('/test/{id}/{name}',function($proid,$proname){
    return $proid.'————————'.$proname;
});
Route::get('/test/{id}/comment/{name}',function($proid,$proname){
    return $proid.'————————'.$proname;
});
```
路由的参数通常会被放在```{}```内,并且参数名只能为字母,而不能包含```-```符号。如果有需要,可以用下划线(```_```)代替```-```。路由参数会按照路由定义的顺序 一次注入到路由毁掉函数或者控制器中,而不受毁掉或者控制器的参数名称的影响。

+ 可选参数
有些时候,我们可能需要制定一个路由参数,但是希望这个参数是可选的。我们可以在参数后面加上?标记来实现,但前提是要确保路由的响应变量有默认值:
```php
// 可选参数
Route::get('/test/{id}/{name?}',function($proid,$proname='husky'){
    return $proid.'————————'.$proname;
});
```

##### 4.1.5 路由组
路由组允许你在大量的路由之间共享路由属性。比如我们在中间件或者在不同的命名空间当中,不需要为每一个路由单独定义这些个属性。共享属性应该以数组的形式传入```Route::group```的方法的第一个参数中。
```php
Route::group([],function(){
    Route::get('a',function(){
        return 'husky_a';
    });
    Route::get('b',function(){
        return 'husky_b';
    });

});
```
posted @ 2020-12-17 09:38  瑶瑶YY  阅读(327)  评论(0)    收藏  举报