laravel5.1简单入门

谭佳成
2018-09-20
(59)

路由 http/routers.php

  • 控制权交给控制器

//表示去SiteController控制器查找index方法 
Route::get('/', "SiteController@index");

  • 匿名函数直接返回

//返回resources/views/welcome.balde.php 
Route::get('/', function(){     return view("welcome"); }); //多级目录可以用斜杠(/)或点(.) return view('sites/about'); return view('sites.about';

php artisan

  • 创建控制器,带默认方法,会保存到http/controllers

php artisan make:controller SiteController

  • 创建控制器,不带默认方法,会保存到http/controllers

php artisan make:controller SiteController --plain

传递变量给视图

  • with

//单个 
$val = 'xxx';
return view('xxx')->with('key',$val);

//多个 
return view('xxx')->with([    'key1' => 'val1',    'key2' => 'val2',    ... ])

  • 第二个参数

$data['key'] = 'val'; 
return view('xxx',$data);

  • compact

$key1 = 'val1'; 
$key2 = 'val2';
return view('xxx',compact('key1','key2'));

视图输出方式

  • 原生php

//都是不转意输出 
<?= $name?>
<?php echo $name?>

  • laravel提供方式

//不转意输出 
{!!  $name  !!}
//转意输出
{{ $name }}

模板引擎

//公共头部,底部 
<!doctype html>
<html lang="en">
<head>    
<meta charset="UTF-8">    
<meta name="viewport"  content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">    
<meta http-equiv="X-UA-Compatible" content="ie=edge">    
<title>commom</title>    
<link rel="stylesheet" href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous">
</head>
<body>    
  {{--定义注入区域--}}    
  @yield("content")    
  {{--定义注入区域--}}    
  @yield('footer')
</body>
</html>

其他模板引用

@extends('app') 
@section('content')
   <h1>contact</h1>
   <h3>list</h3>
   @if(count($list) >0)
   <ul>    
       @foreach($list as $l)        
        <li>{{$l}}</li>    
      @endforeach
   </ul>
   @endif
@stop
{{--注入footer区域--}}
@section('footer')    
   <script>alert('footer!')</script>
@stop

配置

采用读取.env文件配置赋值给项目/config文件夹文件,这个文件被git忽略,也就是无须更改config文件夹下文件具体值,部署时只需在项目根目录创建.env文件即可,可防止数据库信息泄露等

migration

用于团队数据库迁移管理,laravel自带两个表,在/database/migrations

  • 读取文件生成表

php artisan migrate

  • 重命令字段
      1)先撤销上次操作,数据会清空

php artisan  migrate:rollback


2)修改文件字段后
3)再重新生成
php artisan  migrate

  • 创建migrate文件创建表

  1. 先生成migrate文件

php artisan make:migration create_articel_table --create=articles
2)修改新生成的文件字段
3)生成
php artisan migrate

  • 保持原有数据,新增字段
    1)生成migrate文件

php artisan make:migration add_intro_colum_to_articles --table=articles
2)修改新生成的文件,关键代码:

public function up() {     
   Schema::table('articles', function (Blueprint $table) {        
       $table->string('intro');    
   });
} //注意:要执行down操作,需要doctrine/dbal包支持(composer require doctrine/dbal),见官网https://laravel.com/docs/5.1/migrations
public function down() {    
    Schema::table('articles', function (Blueprint $table) {        
        $table->dropColumn('intro');    
    });
}

3)再次生成

php artisan migrate

Eloquent

  • 创建模型文件

php artisan make:model

  • 命令行工具:tinker
    意义:命令行操作模型(curd)

进入工具命令

php artisan tinker

  • tinker命令行实例

  • 实例化模型

$article = new App\Article;

  • 以属性的方式设置值

$article->title = "my first title";
$article->content = "content";
$article->published_at = Carbon\Carbon::now();

  • 保存写入数据库

$article->save();
可能会报错:[Symfony\Component\Debug\Exception\FatalErrorException]
syntax error, unexpected ':', expecting ';' or '{'
解决方案,把vendor目录删除,再composer update,安装完成后再save()就ok啦。

  • 以数组的方式查看

$article->toArray();

  • 查找

$first = App\Aticle::find(1)

  • 更新

$first->title = 'update title';
$first->save();

  • 得到数据集

$section = App\Article::where('content','=','content')->get();

  • 得到数组

$section = App\Article::where('content','=','content')->first();

  • 一次性保存数据,需模型定义可填充字段$fillable=['title','content','published_at']

$article = App\Article::create(['title'=>'third title','content'=>'content3','published_at'=>Carbon\Carbon::now()]);

查询失败自动跳转404

  • findOrFail();

打印函数

  • dd();

跳转文章详情url

  • 直接拼接路由

article/{{$article->id}}

  • url

{{url(‘article’,$article->id)}}

  • action,调用controller哪个方法,并且带个参数过去,区分大小写

{{action(‘Article@show’,[$article->id])}}

表单生成

强大的时间处理类Carbon

对数据库字段预处理

  • 模型内setAttribute

public function setFieldAttribute($date){      
   $this->attributes['published_at'] = Carbon::createFromFormat('Y-m-d',$date);
}

  • queryScope

public function scopePublished($query) {   
   $query->where('published_at','<=',Carbon::now());
}

然后就可以在模型方法上调用Publishe方法

$data['list'] = ArticleModle::latest()->published()->get();

表单验证

  • request对象

php artisan make:request createArticleRequest
在http/request/createArticleRequest.php中定义好rules,然后在控制器调用该request对象
public function store(Requests\createArticleRequest $request)

  • 使用validate

$this->validate($request,['title'=>'required|min:3','content'=>'required','published_at'=>'required']);

  • 前台接收验证失败返回错误

@if($errors->any())   <ul>   @foreach($errors->all() as $e)   <li class="list-group-item list-group-item-danger">{{$e}}</li>   @endforeach   </ul>  @endif 

路由函数

  • Route::resource会自动生成相关路由

Route::resource('articles',"Article");

使用php artisan route:list查看生效路由
|        |GET|HEAD | articles                 | articles.index   | App\Http\Controllers\Article@index                    |            |
|        | POST     | articles                 | articles.store   | App\Http\Controllers\Article@store                    |            |
|        | GET|HEAD | articles/create          | articles.create  | App\Http\Controllers\Article@create                   |            |
|        | PUT      | articles/{articles}      | articles.update  | App\Http\Controllers\Article@update                   |            |
|        | DELETE   | articles/{articles}      | articles.destroy | App\Http\Controllers\Article@destroy                  |            |
|        | GET|HEAD | articles/{articles}      | articles.show    | App\Http\Controllers\Article@show                     |            |
|        | PATCH    | articles/{articles}      |                  | App\Http\Controllers\Article@update                   |            |
|        | GET|HEAD | articles/{articles}/edit | articles.edit    | App\Http\Controllers\Article@edit                     |            |

Form-Model-Binding

{!! Form::model($article,['method'=>'PATCH','url' => '/articles/'.$article->id]) !!} 

表单会绑定$article,表单name值和$article内key值一致会自动绑定

Eloquent Relationship

比如一个用户对应多篇文章,在articles表新增user_id字段
在ariticle模型内新增方法

public function user() {   return $this->belongsTo('App\User');//$article->user;  } 

在user模型内新增方法

public function articles() {   return $this->hasMany('App\Article');//$user->articles  } 


如无说明,本站文章均为原创,转载或引用注明来源:https://93jc.cn/article/169.html