美文网首页
laravel初接触

laravel初接触

作者: 一只码农的成长 | 来源:发表于2018-06-28 14:13 被阅读0次

    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找不到的情况
    

    相关文章

      网友评论

          本文标题:laravel初接触

          本文链接:https://www.haomeiwen.com/subject/inugyftx.html