evantianx / Bloooooooog

Place to record what I thought and learned
0 stars 0 forks source link

Laravel学习 #19

Open evantianx opened 7 years ago

evantianx commented 7 years ago

Laravel 安装

首先安装 wamp 和 composer ,装好之后利用 composer 这个依赖管理器来安装 laravel :

evantianx commented 7 years ago

Laravel基本工作流程

即路由功能。

// routes/web.php
Route::get('/', function(){
  return view('welcome');
})

也可以添加控制器来取代函数:

# 默认为plain 
# 添加--resource后可以加index()、create()等函数
php artisan make:controller SitesController

之后在Http/Controllers下可以找到生成的控制器SitesControllers.php,对其进行修改:

//省略部分代码
public function index(){
  return view('welcome')
}

此时即可修改路由为:

Route::get('/', 'SitesController@index');

注: 第二个参数表示, 首先找到控制器SitesController,然后运行其中的方法index

evantianx commented 7 years ago

Laravel向视图传递变量

具体来说,有三种方法:

evantianx commented 7 years ago

Laravel Blade模版简介

evantianx commented 7 years ago

Migration

数据库操作:

# 开启服务
mysql.server start 

# 登陆数据库
mysql -h localhost -u root -p 

# 创建数据库 laravel
create datebase laravel;

# 显示所有数据库
show databases;

#  切换到 laravel 数据库
use laravel;

在项目目录下的.ENV文件中对数据库进行配置,配置成功后即可执行下列命令:

# 生成数据格式
php artisan migrate

想要修改某个数据类名,应该如何做:

php artisan migrate:rollback
# 修改完成后
php artisan migrate

如何创建表

# 创建一个名为 comments 的表
php artisan make:migration create_comments_table --create=comments

对表进行增加

# 为 comments 表添加一个like 字段
php artisan make:migration add_like_column_to_table --table=comments
evantianx commented 7 years ago

Eloquent

Laravel 的 Eloquent ORM 提供了漂亮、简洁的 ActiveRecord 实现来和数据库进行交互。每个数据库表都有一个对应的「模型」可用来跟数据表进行交互。你可以通过模型查询数据表内的数据,以及将记录添加到数据表中。 所有的 Eloquent 模型都继承自 Illuminate\Database\Eloquent\Model 类。

创建:

# 上节中创建了 comments 表,laravel 会自动识别并关联到该表
php artisan make:model Comment

之后进入命令行利用 tinker 操作:

# 开启 Psy Shell
php artisan tinker

# 创建一个实例
$comment=new App\Comment

# 添加数据
$comment->username='Rubicker'
$comment->content='haha'
$comment->published_at=Carbon\Carbon::now()
$comment->like=1

# 储存于数据库中
$comment->save()

将数据展开成数组查看:

$comment->toArray()

查找数据:

# 传入id进行查找,之后用 $first 即可进行增删改查
$first=App\Comment::find(1)

# 通过某个字段进行查找,第二个参数 = 可以省略,返回一个 collection 类
$second=App\Comment::where('content','=','haha')

上述这样创建一条数据的方法看起来比较麻烦,有没有一次性填入多条数据的方法呢?

$comment=App\Comment::create(['username'=>'you','content'=>'hehe','published_at'=>Carbon\Carbon::now(),'like'=>2])

直接输入上述命令会报错,原因在于Comment.php中没有指定可填充的字段。

class Comment extends Model
{
  // 定义可填充内容
  protected $fillable=['username', 'content', 'published_at', 'like'];
}

更新数据:

$comment->update('username', 'him')
evantianx commented 7 years ago

结合 Eloquent 和 Controller 制作简易blog

首先创建一个 CommentsController:

php artisan make:controller CommentsController

注册路由:

Route::get('/comments', 'CommentsController@index')

CommentsController.php中写入index方法:

public function index()
{
  # 获取所有数据,默认以 JSON 格式展示
  $comments=Comment::all();
  return $comments;
}

注意要在CommentsController中添加use App\Comment;

我们可以return一个视图,并将变量传入:

return view('comments.index', compact('comments'));

之后在vendor/view下定义视图,处理传入变量:

// app作为一个模版使用
@extends('app')
@section('content')
  <h1>这是评论区</h1>
  <hr>
  @foreach($comments as $comment)
    <h2><a href="#">{{ $comment->username }}</a></h2>
    <article>
      <div class="body">
        {{ $comment->content }}
      </div>
    </article>
  @endforeach
@stop

为每条 comment 添加一个路由,并创建其视图:

Route::get('/comments/{id}', 'CommentsController@show');
// CommentsController.php
public function show($id) 
{
  $comment=Comment::findOrFail($id);
  return view('comments.show', compact('comment'))
}
// view/comments/show.blade.php
@extends('app')
@section('content')
  <h1>{{ $comment->like }}</h1>
  <article>
    <div class="body">
      {{ $comment->content }}
    </div>
  </article>
@stop

那么我们应该如何处理index.blade.php中每条评论链接呢?

// 直接写
<h2><a href="/comments/{{ $comment->id }}">{{ $comment->username }}</a></h2>
// 利用 url()
<h2><a href="{{ url('comments', $comment->id) }}">{{ $comment->username }}</a></h2>
// 利用 action()
<h2><a href="action('CommentsController@show', [$comment->id])">{{ $comment->username }}</a></h2>