laravel初接触

laravel中文文档

一、本地安装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文件来使用
app.scss.png

4、在实际开发中,会存在某一模块需要在很多页面中使用,为了实现代码的复用,就需要使用@yield,@extends,@section,@endsection
使用方法:建立一个父模版页面,将公共的部分写在里面,然后在需要变更的地方用@yield('占位名')占位符来占位,在子模版页面中使用@extends('父模版')继承父模版里面的内容,然后使用@section('占位名')<页面布局代码块>@endsection
如果只是希望给父模版页面传一个值,那么就不用定义section块,直接使用@section('<占位名>','<值>'),父模版使用@yield('<占位名>','<默认值>'),这样渲染引擎在渲染时,如果子模版通过@section传值了,那么就用子模版传过来的值来取代占位符,如果子模版没有传值,那么就用默认值来取代占位符
父模版页面.png
子模版页面.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找不到的情况

猜你喜欢

转载自blog.csdn.net/weixin_41767780/article/details/80876021