TypechoJoeTheme

Jim Tse

【PHP】安装laravel

本文最后更新于2023年06月27日,已超过450天没有更新。如果文章内容或图片资源失效,请留言反馈,我会及时处理,谢谢!

Docker Desktop安装(Mac)

curl -s "https://laravel.build/example-app" | bash
cd example-app
 
./vendor/bin/sail up

常用命令

命令意义
php artisan make:controller IssuesController新建控制器
php artisan make:controller IssuesController -r新建控制器并自动生成对应 RESTful风格路由相关CURD方法
php artisan make:migration create_issues_table --create=issues新建一个迁移文件
php artisan migrate运行迁移,将迁移文件的内容写入数据库中
php artisan migrate:rollback回滚上一次迁移的内容
php artisan make:model Models/Issue新建模型
php artisan make:model Models/Issue -m同时生成模型和对应的迁移文件
php artisan tinker使用命令行来调试Laravel、操作模型等
php artisan route:list打印出所有的路由

时区

如果你的项目中,所有的时间都出现问题,可能少了8个小时或者其他情况,那么你需要去config/app.php中,设置一下时区,问题就解决了。
'timezone' => 'PRC',

控制器-Controller

作用就是整个程序的逻辑部分,可以调用模型做一些数据处理,还可以显示模板,with发送数据到模板,跳转等等。
如果需要发送多个数据到模板,那么可以使用compact函数来简化代码。

模型-Model

模型一般都放在App\Models中。初学模型,暂时也不用太深入,知道我们是使用模型来操作数据库的就好。 目前需要掌握的也只有定义 白名单 和关联。我们实现了issues和comments的一对多关联,comments表中一定要有issue_id来做对应。模型的关联除了一对多外,还有一对一,多对多.
这里还是用 php artisan tinker来看一下这两个例子。
//通过$issue,查询对应的所有comments。 $issue = Issue::find(13) $issue->comments
//通过comment,查询所属的issue。 $comment = Comment::find(1) $comment->issue
除此外也可以在模型中自定义一些方法来调用。

迁移-Migration

数据库中,有一个migrations表,这里记录的是所有已经跑过的迁移列表,如果这里已经有记录了,那你再跑php artisan migrate,他是不会重复执行的。换句话说,就是只会运行之前从没有跑过的迁移文件。
如果你觉得迁移用的不习惯,觉得直接动手使用sequal pro或者navicat这类软件建表更方便,那其实也完全没有任何问题的,laravel一样可以用的好好的。

布局模板

再来看模板部分,将页面相同的公共部分,抽离出来,放在layout/app.blade.php,并且加上@yield('content')
其他的页面
@extends('layouts.app') @section('content') @endsection
这样就简简单单的实现完成了。

子视图模板

在首页里,我们使用 子视图模板,现在来说一下为什么要使用这么个东东?
其实最主要的作用也是为了处理一些重复的页面片段。另一个是可以分离出去一部分页面,让页面整体结构更清晰。

实践子视图

我这么说,你可能还是不明白,那么我们来实际操作一下。
观察welcome/_issue_list.blade.php 和 issues/index.blade.php这两个文件,你会发现foreach部分的代码几乎一模一样的。
那么这里就可以使用子视图模板来处理了,对于这种公共的片段,我们一般会在views里面建一个shared文件夹,表示他是公共的,然后将welcome/_issue_list.blade.php移动进去。
再到 issues/index.blade.php中 ,将 {{ $issues->links() }} 拿到页面最下面,然后用将 整个foreach用这一行代替
@include('shared._issue_list') {{ $issues->links() }}
welcome/index.blade.php中,也稍微调整下路径@include('shared._issue_list')
再来访问,所有的功能都可以正常使用,这样就实现了 Don't Repeat Yourself。

csrf

csrf是一种常见的安全攻击,在这里两句话说不清楚,有兴趣的同学可以自行了解一下。
对于我们初学者来说,只要记得在所有的表单中,都加上这一段代码就好
{{ csrf_field() }}

路由

路由是laravel学习的重中之重了,初学者觉得最困难的也是这个地方。你需要知道的是,路由就是为了定义 请求地址和控制器方法的对应关系的。
restful 与 resource

VerbURIActionRoute Name作用
GET/issuesindexissues.index列表显示所有的issues
GET/issues/createcreateissues.create显示新增issue的表单
POST/issuesstoreissues.store真正执行新增操作,插入数据库
GET/issues/{issue}showissues.show显示一条issue
GET/issues/{issue}editissues.edit显示编辑issue的表单
PUT/PATCH/issues/{issue}updateissues.update真正执行更新操作,修改数据库
DELETE/issues/{issue}destoryissues.destroy删除issue

先来回顾一下resource路由,如果你需要对数据库的一个资源做curd,那就可以直接使用resource路由。
需要注意的是uri部分,这里有很多路径是一模一样的,这就是restful的规范了,例如issues.show issues.update issues.destroy,他们三个的路径就是完全一模一样。传统的一些框架,是只能支持get post的,对于这样的路径地址就无法区分了。
在laravel,可以使用不同的动词,虽然都是相同的路径,issues.show 使用get, issues.update使用put,issues.destroy使用delete。这样就可以实现相同的访问地址,对应控制器中的不同方法。但是除了浏览器默认支持的get和post外,其他请求不要忘记使用method_field来伪造。

    Route::get('issues/{issue}', 'IssuesController@show')->name('issues.show');
    Route::get('issues/create', 'IssuesController@create')->name('issues.create');
    Route::get('issues', 'IssuesController@index')->name('issues.index');
    Route::post('issues', 'IssuesController@store')->name('issues.store');
    Route::get('issues/{issue}/edit', 'IssuesController@edit')->name('issues.edit');
    Route::put('issues/{issue}', 'IssuesController@update')->name('issues.update');
    Route::delete('issues/{issue}', 'IssuesController@destroy')->name('issues.destroy');
    Route::resource('issues', 'IssuesController');

参数

路由中的issues.show的对应的uri包含了这样一个有大括号的路径,/issues/{issue},那么超链接那里就可以写{{route('issues.show', 10)}},这个10,就会替换掉{issue},生成的路径也就是/issues/10。
除此外,在控制器的方法中,直接可以就可以使用这个$id,也就是传过来的10,而不用像其他框架那样要用$_GET['id']来取值了。
function show($id) { return $id; }

顺序

路由的顺序是非常重要了,一定要记得是从上向下执行的。如果resource路由提供的curd方法,依然不能满足项目需求,往往还会自定义一些新的方法,这时一定要写在resource路由的上方,这个我们后期项目中碰到,到时再细说。

api.php

routes文件夹中,除了web.php外,还有个api.php,这个是做接口使用的。区别是会去掉session cookie等相关中间件,路径上会自动添加/api前缀。这个目前也暂时不需要了解太多。后面的项目我们碰到做接口再细说了。

单复数

laravel中对单复数要求的非常严格,有的地方是单数有的是复数,初学者很容易被搞晕。这里我做了个统计表,一看便知。
控制器的命名是复数。
模型的命名是单数,但数据库中的表都是复数形式。
资源路由也是复数,对应的uri,一般也是复数。
查询的多条数据,是复数,单条数据就是单数了。
模型的关联中,has_many,因为有很多,是复数。belongs_to,只属于某一个,所以是单数了。

命令意义
控制器复数
模型单数
数据库中的表复数
资源路由复数
uri复数
多条数据复数
单条数据单数
has_many复数
belongs_to单数
赞(1)
版权属于:

Jim Tse

本文链接:

https://jimtse.eu.org:88/program/laravel-install.html(转载时请注明本文出处及文章链接)

评论 (0)