laravel5.5+laravel官方地址Laravel是目前最流行的PHP框架,发展势头迅猛,应用广泛。丰富的扩展包,应对你能想到的各种应用场景,laravel框架前卫,紧跟时代潮流,崇尚优雅代码,自称为“网络工匠”。路由、刀片模板引擎、控制台、容器、composer扩展包,为业务开发提供了极大的便利。国内已经有很多laravel社区,比如laravel-chinagolaravellaralcademy。当然还有更多的网站可供开发者学习交流。可以自行google或百度。但是,如果要阅读文档,建议查看英文网站的官方网站(如果允许英文的话)。官网也有相应的社区供开发者问答,不过好像没那么活跃。提问的话,需要有一定的英语基础。起码可以看stackoverflow上的Understanding问答。言归正传,这里给大家介绍一下laravel5.5的简单易用教程。如果你需要了解laravel框架的整体设计和实现原理,MVC、设计模式(尤其是工厂模式)、路由、管道、容器、控制反转、依赖注入等一定要了解,我就不说了在这里深入讨论一下,不然作者娃要吐血写个系列了,想想都觉得累(经常加班没时间!)。本教程让你按照123个步骤在短时间内完成一个网站的应用,贯穿laravel的各个层级。对于刚接触框架的开发者,先申请再深入。这也是学习之道,何乐何乐而不为?好的,我们开始吧!前期准备安装php7(最好加上环境变量)。可以去官网或者包管理工具安装,例如:brewinstallphp7installcomposerinstallmysql创建一个laravel项目1.在终端运行命令composercreate-projectlaravel/laravelblog2.进入blog文件夹并运行php-Slocalhost:80-tpublic3。浏览器访问http://localhost4。运行命令phpartisan。如果第3步和第4步成功运行,则一切正常,您可以继续下一步。5.使用你的编辑工具,以sublime为例,打开博客项目,Ctrl+P找到web.php,写入如下代码,注册路由:Route::get('/test',function(){return"
嗨,星期天。
";});这里简单说明一下,路由在routes目录下,一共有三个文件:web.php、console.php、channel.php,web.php是负责网站路由的,也就是php的时候会用到作为http请求运行。console.php用于在命令行模式下运行artisan命令。这个后面会提到,广播消息的时候会用到channel.php,本文略过,需要阅读的可以查看文档get是http请求方式,也可以使用post/put/delete/patch在路由注册的时候,laravel-router也提供了一个方便的restful风格的路由注册资源方法,可以进行后续业务处理的增删改查。上面的例子是一个匿名函数。其实一般情况下都会有路由组、前缀、中间件(后面会提到)、别名、匹配等的链式调用:Route::prefix('prefix_example')->middleware(['m_exaple_1','m_example_2'])->group(Route_Closure);这是一个完整的例子:Route::prefix('hi')->middleware(['hi_m'])->namespace('sd')->group(function(){Route::post('sunday','SundayController@sunday')->name('hi.sunday.post');Route::put('sunday','SundayController@sunday')->name('hi.sunday.put');})如何?laravel路由的注册方式是不是很友好灵活?其中,Route也可以使用app('router')访问,app()是一个辅助方法,这个辅助方法在vendor\laravel\framework\src\Illuminate\Foundation\helpers.php中,还有很多其他的有用的辅助方法方法。app()涉及到容器和门面注册的思想,这里不做详细介绍。6.访问下面刚才注册的路由,http://localhost/test7。在app/Http/Controllers下手动新建一个controller或者命令行生成一个controller:phpartisanmake:controllersd/SundayController,然后你会看到app/Http/sd下有个SundayController.php,写入如下内容代码:publicfunctionsunday(){return"Hisunday";}8.web.php注册路由成功访问:Route::prefix('hi')->namespace('sd')->group(function(){Route::get('sunday','SundayController@星期日')->名称('hi.sunday.get');})9.中间件,运行命令phpartisanmake:middlewareMyMiddleware,会生成一个标准的中间件,打开MyMiddleware.php可以看到有两个方法handle和terminatepublicfunctionhandle($request,$next){//以上两个inputsReference,不用管,这个是laravel路由分发时自动注入的参数,$request是laravel封装的请求对象,Illuminate\Http\Request,可以拿到super变量的所有数据,并且还可以得到一些相应的请求处理方法,比如session(),getClientIp()。//该方法在进入Controller之前运行,目的是预处理或验证本次请求。app('log')->info('Recordalog');}publicfunctionterminate($request,$response){//这个方法在请求即将关闭时运行,可以处理一些响应相关的逻辑。app('log')->info('重新记录日志');}10、中间件注册,打开app/Http/Kernel.php,在$middleware中添加app\Http\Middleware\MyMiddleware::class11。查看storage/logs/laravel.log(如果你在config/app.php配置日志通道为daily,应该能看到日期格式的文件),应该有上一步记录的日志信息和对应的日志级别,laravellogs使用monolog,可以使用多种驱动来记录日志,还可以配置上报策略,实现loggerinterface接口,符合psr3规范。12、在视图层,在刚才的方法SundayController@sunday中,将返回值改为:returnview('test.test',['name'=>'sunday','testArray'=>[1,2,3]]);在前端模板所在目录resources/views下创建目录test,并创建刀片模板test.blade.php,代码如下:@if($name)
{{$name}},你好
@else
匿名,你好
@endif@foreach($testArrayas$testNumber)
{{$testNumber}}@endforeach当controller返回时view,第一个参数是resources/views下的目录层级,编号为.,上面的test.test表示视图文件在test/test.blade.php中。第二个参数是一个传递给视图层的数组,里面包含应该是一个key=>value的关联数组,因为在blade模板引擎中,对应的key会直接转换成可用的变量。在返回视图之前,如果你定义了一个视图绑定,比如boot在ComposerServiceProvider方法中注册了相应的视图绑定,那么会先处理这一步,然后将数据传递给目标文件。本例中,test.blade.php获取到参数后,会通过blade引擎解析模板文件,解析语法,转换成普通的html文本。{{$name}}或{!!$name!!}的语法等同于=$name>。前者会过滤掉一些特殊字符来防止xss,而后者会直接输出文本,不安全。@if...@endif是一个条件判断语句,后面可以跟一个简短的php逻辑判断@foreach...@endforeach轮询数组的其他语法可以参考官方文档。以上步骤只完成了从路由到视图的简单处理。再来看看数据模型,Model层13配置数据库database.php//config/database.php'mysql'=>['driver'=>'mysql','host'=>env('DB_HOST','127.0.0.1'),//host'port'=>env('DB_PORT','3306'),//port'database'=>env('DB_DATABASE','forge'),//给你需要配置你的数据库'username'=>env('DB_USERNAME','forge'),//配置你的用户名'password'=>env('DB_PASSWORD',''),//密码'unix_socket'=>env('DB_SOCKET',''),'charset'=>'utf8mb4','collat??ion'=>'utf8mb4_unicode_ci','prefix'=>'','strict'=>true,'engine'=>null,],.env//.env文件DB_HOST=127.0.0.1DB_PORT=3306DB_DATABASE=test#这里需要在数据库中手动创建一个数据库DB_USERNAME=root#你自己的用户名DB_PASSWORD=pwd#你自己的密码14.运行artisan命令phpartisanmake:auth15。运行artisan命令phpartisanmake:migration创建用户表和密码表,进入你的数据库查看是否创建成功16.此时,打开网站首页,你会看到一个登录标志。注册成功后,会在user表中看到多了一条数据,说明数据库连接成功。模型可以通过phpartisanmake:modelTestModel创建,如果你没有特殊要求,它会出现在app目录下。进入Model,你会看到它继承了一个Eloquent\Model。该ORM模型可以为您提供多种CURD方法。有关详细信息,请参阅文档。Model中需要自定义一些属性,比如table,fillable,guards等。软删除使用SoftDeletes是支持的,但是deleted_at字段必须存在于对应的表中。你也可以使用DB匿名类或者app('db')得到一个比EloquentModel更原始的模型对象,这会让你对数据库的操作更原始。对应的MVC用法的简单介绍见上面的文档。我们先看一下控制台使用终端进入项目目录,运行phpartisan查看所有可执行命令运行phpartisanroute:list查看已经注册成功的路由列表phpartisanmake:commandNewCommand新建一个命令打开app/Console/Commands/NewCommand.php,在$signature后面定义一个命令名比如:test:test{--O|op=:Thisismytestparameter},把你的逻辑写在handle()方法中.如:$this->info('我的第一个命令');//将在终端上输出文本$this->error('mycommandiswrong');//将在终端上输出文本$this->confirm('Confirmmyorder?');//选择是/否$this->choice('我还有其他选择:',["A","B"]);//选择A$this->output->progress();//进度条echo$this->option('op');//获取定义的参数值后,在app/Console/Kernel.php中注册命令App$commands\Console\Commands\TestCommand::class,运行phpartisantest:test--op=1,成功输出1,this命令被认为是完整的。如果要添加定时任务,可以在schedule()中添加命令,$schedule->cron("00000")这里填写crontab格式。您可以运行phpartisanschedule:run来执行定时任务。Laravel会在你的项目维护或迭代过程中自动完成定时任务。重新启动作曲家扩展包。如果你细心,当你创建一个laravel项目时,你会注意到composer会在项目中创建一个vendor目录。该目录下存放了各种扩展包,如:laravel/framework、symphony/console、monolog/monolog等,这些扩展包是laravel的宝库,为你提供了极大的便利。所有扩展包都需要符合psr4加载规范,通过spl_autoload_register()方法自动添加,composer会生成一个autoload_classmap.php,里面可以找到所有加载的类和文件。如何开发作曲家扩展包?1、新建目录test,进入并运行composerinit。这里type一般选择project/library,license一般选择MIT协议(一种开源授权协议)。2.打开composer.json,添加psr4规则:"autoload":{"psr-4":{"Name1\\\Name2\\":"name/src/Name"//意思是根据psr4规范,对于name/src/Name目录下的所有文件,命名空间加载为Name1\\\Name2\\作为类前缀。}}3。创建name/src/Name目录,在Name目录下创建NameServiceProvider.php文件。代码如下:app->bind('test',Name1\Name2\Handlers\TestYou::class);}我们为什么要必须定义匿名类?因为劳拉vel框架本身的要求就是少关注工具类的实现,多关注业务本身,所以所有的sdk或者扩展包在访问的时候都尽量提供方便,$this->app->bind()也体现了一种依赖注入控制反转的思想,这样就定义了匿名类,在config/app.php中注册对应的匿名类Test和NameServiceProvider后就可以很方便的使用了,比如:\Test::test()或app('test')->test(),无需担心它们的命名空间。上面的扩展包功能已经基本成型,需要放到相应的代码托管仓库,比如github或者https://packagist.org(推荐),可以尝试使用命令composerrequire{yourpackagename}安装在laravel中。由于本文是第一次写,难免有很多不合理的地方。希望各位读者多多提出优化建议,以后会在文章中考虑。大家一起成长,一起发财。保持饥饿,保持愚蠢。