一、本地安装laravel框架
通过composer安装laravel框架:
//composer create-project --prefer-dist laravel/laravel <项目名>
composer create-project --prefer-dist laravel/laravel blog
二、执行artisan命令
1、控制器
通过如下命令创建的控制器会出现在app
文件夹里的Http
文件夹里的Controllers
文件夹里
php artisan make:controller <控制器名字>
三、laravel框架初识
在laravel框架里,路由访问控制器,控制器调用模版
1、在laravel框架里,文件的访问必须通过路由,所有的路由都在routes
目录中的路由文件来定义,web
界面的路由是在routes/web.php
文件中定义
Route::get('/', 'TestController@home');
如上的路由将会寻找控制器TestController
中的home
方法
2、控制器中调用模版的示例
class TestController extends Controller
{
public function home()
{
return view('home.home');
}
//
}
view
方法访问的是resources
文件夹里的views
文件夹,上面示例寻找的是views
文件夹里的home
文件夹里的home
模版,模版文件的命名规范是文件名.blade.php
3、laravel
框架引入了bootstrap4
,如果想在页面中使用bootstrap4
,可以直接引入public
里的css
里的app.css
文件来使用
4、在实际开发中,会存在某一模块需要在很多页面中使用,为了实现代码的复用,就需要使用@yield
,@extends
,@section
,@endsection
使用方法:建立一个父模版页面,将公共的部分写在里面,然后在需要变更的地方用@yield('占位名')
占位符来占位,在子模版页面中使用@extends('父模版')
继承父模版里面的内容,然后使用@section('占位名')<页面布局代码块>@endsection
,
如果只是希望给父模版页面传一个值,那么就不用定义section
块,直接使用@section('<占位名>','<值>')
,父模版使用@yield('<占位名>','<默认值>')
,这样渲染引擎在渲染时,如果子模版通过@section
传值了,那么就用子模版传过来的值来取代占位符,如果子模版没有传值,那么就用默认值来取代占位符
子模版页面.png
5、配置前端脚手架,方便代码的开发,不用再去配开发环境
npm install
-->npm install cross-env
6、npm run dev
编译,会根据webpack.mix.js
文件,将css和js编译到指定的位置
7、npm run watch
:每次改变scss
等文件之后执行npm run dev
编译,会麻烦也不高效,所以要监听文件,这样每次修改scss
文件之后,会自动帮我们编译
8、对于复用的代码片段,可以通过@include('<文件名>')
来引入
9、路由起别名
Route::get('/', 'TestController@home');
这种路由的定义方式下,可能路由的路径需要改变,这时候,如果不改变相应链接的href值,那页面可能会找不到。针对这种情况,可以通过链式操作给路由起一个别名,如下:
Route::get('/', 'TestController@home')->name('home');
相对应的链接的地方,使用{{route('<路由别名>')}}
的方式访问
10、数据库迁移,相当于数据库的版本控制
首先需要修改.env
文件中与数据库相关的配置,php artisan migrate
执行数据库迁移,会根据database
文件夹里的migrations
文件夹里的迁移类文件来生成数据表,执行的是类里的up方法,除了生成与文件对应的表之外,还会生成一个migrations
表,里面记录的就是创建表的版本信息
当执行过数据迁移后,若不创建新的迁移文件(即不创建新的数据表)(每个迁移文件的文件名都会有对应的时间戳),再执行数据迁移,不会有效果,因为它会到migrations
表中查找有没有对应的表,如果有那么就不会再创建
php artisan migrate:rollback
执行回滚迁移,执行的是类文件里的down方法,会将数据表删除,migrations
表中对应表的记录也会删除
11、创建模型
在框架结构中,一般不直接操作数据库中的数据表,而是通过创建一个模型,将模型与数据表对应,可以通过php artisan make:model
来创建一个模型,可以在后面跟上-m
来一起生成一个数据迁移文件,如:php artisan make:model Article -m
,那么就会在app
文件夹下生成Article
模型,并在database
文件夹下的migrations
文件夹下生成对应的迁移文件
如果在模型文件中不指定表名,那么默认对应的数据表的表名就是<模型名>s
的命名方式
12、使用tinker可以让我们在命令行测试数据库,而不用在文件中写测试语句
php artisan tinker
进入tinker命令行
在tinker命令行中可以通过模型修改表记录,如:
php artisan tinker
use \App\User
$user = User::first() //获取user表中第一条记录
$user->name = '小明' //这样修改数据表中的记录并不会被改变,需要再执行save操作才能将两者进行同步
$user->save() //这样操作后数据表中的记录才会被修改
//也可以通过如下更新表记录
$user->update(['name'=>'小红'])
13、通过路由传递参数
在定义路由时,可以在路径后面用{}的方式跟参数,在对应方法里用形参接收,如:
//web.php
Route::get('/user/{name}', 'user\UserController@show')->name('show');
//UserController/show方法
public function show($name){
dd($name); //框架自带的打印方法
}
//地址栏
<域名>/user/小明
//跳转的页面中就会将‘小明’打印出来
路由隐式参数的效果:只要方法里的形参名与路由中定义的参数名一致
//web.php
Route::get('/user/{user}', 'user\UserController@show')->name('show');
//UserController
use App\User
//UserController/show方法
public function show(User $user){
dd($user->toArray()); //框架自带的打印方法
}
//地址栏
<域名>/user/1
//页面中就会将数据表user表中主键为1的那条记录打印出来
//如果$user与{user}两者的名字不一致,比方说形参名变为$people,那么这时候就会出现404找不到的情况
网友评论