laravle框架
laravel框架的目录结构:
app 目录:项目的核心目录,用于存放核心代码,如控制器、模型等。 bootstrap目录:laravel启动目录,目录包含了框架启动和自动加载设置的文件,autoload.php文件用于自动载入需要的类文件。 config目录:项目的配置目录,主要存放配置文件,比如数据库的配置。 database目录:目录包含了数据迁移及填充文件,就是使用文件的方式,来管理数据库,创建一个PHP文件,在文件中设计表结构,运行该文件,完成表的创建。 public 目录:laravel项目的web虚拟主机指定的目录,项目的入口文件和系统的静态资源目录(css,img,js,uploads)后期使用的外部静态文件(js、css、图片等)都需要放到Public目录下。
resources目录:存放视图文件,还有就是语言包文件的目录。 routes目录:定义路由的目录,laravel中所有的访问请求,都必须事先定义好路由,web.php是定义路由的文件。 storage目录:主要是存放缓存文件和日志文件,注意,如果在【linux】环境下,该目录需要有【可写】权限。 vendor目录:主要是存放第三方的类库文件,laravel思想主要是共同的开发,不要重复的造轮子(例如里面可能存在验证码类,上传类,邮件类),该目录还存放laravel框架的源码,注意如果要使用composer软件管理的,composer下载的类库都是存放在该目录下面的。
env文件:主要是设置一些系统相关的环境配置文件信息。config目录里面的文件配置内容一般都是读取该文件里面的配置信息(config里面的配置项的值基本都是来自.env文件)。
artisan脚手架文件:主要用于生成的代码的(自动生成),比如生成控制器,模型文件等。
composer.json文件:依赖包配置文件声明当前需要的软件依赖,但是不能删除,composer需要使用。
配置laravel虚拟机中的指向路径必须是public目录
不用配置apache配置文件也可以使用laravel框架 直接用命令:
php artisan serve --port=端口号
一定要注意端口冲突问题。
laravel路由:
什么是路由:
将用户的请求按照事先规划的方案提交给指定的控制器或者功能函数来进行处理。
在Laravel框架中,其并没有指定固定参数,其路由必须要手工进行配置。把用户需要访问的全部路由都事先设置好,用户只能访问声明的一些路由,即没有声明的路由是不能被访问的,进而可以对网站的安全有一定的保护作用。
配置路由:
路由定义:
Route::请求方式(‘url’,闭包函数); Route::请求方式(‘url’,’控制器名称@操作方法’);
默认根路由,系统给我们提供的,也就是一开始打开域名它所指定的路由。
请求方式:
常用的4中请求方式:
GET(SELECT):从服务器取出资源(一项或多项)。
POST(CREATE):在服务器新建一个资源。
PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
DELETE(DELETE):从服务器删除资源。
在laravel中我们可以定义这样请求的路由请求方式:
Route::get($uri, $callback); Route::post($uri, $callback); Route::put($uri, $callback); Route::delete($uri, $callback);
有的时候你可能需要注册一个可响应多个 HTTP 方法的路由,这时你可以使用 match 方法,也可以使用 any 方法注册一个实现响应所有 HTTP 的请求的路由:
# 支持 get和post请求 Route::match(['get', 'post'], ‘$uri', $callback); # 支持所有类型的请求 (不建议用它) Route::any('foo',$callback);
路由参数:
路由参数主要针对的是GET请求的情况
语法:
# 必填 Route::get('URL/{参数名称}','闭包函数或控制器响应方法标识'); # 可选 Route::get('URL/{参数名称?}','闭包函数或控制器响应方法标识'); # 参数限制 Route::get('URL/{参数名称}','闭包函数或控制器响应方法标识')->where('参数名称','正则表达式'); Route::get('URL/{参数名称}','闭包函数或控制器响应方法标识')->where(['参数名称'=>'正则表达式']);
where('参数名称','正则表达式')用来对输入的参数进行限制,只有符合正则表达式要求的参数才可以传递。
路由别名:
路由别名相当于在路由定义的时候,为路由起了一个别名,在以后的程序中可以通过这个别名来获取路由的信息。
#例如 Route::get('index',function(){ })->name('名字'); $url=route('名字'); #可以生成对应的url地址
命名空间:
为控制器组指定公共的 PHP 命名空间。这时使用 namespace 参数来指定组内所有控制器的公共命名空间
#例 Route::group(['namespace' => 'Admin'], function () { // 在 "App\Http\Controllers\Admin" 命名空间下的控制器 });
路由前缀分组:
Route::group(['prefix' => 'admin'], function () { Route::get('users', function () { // 匹配 "/admin/users" URL }); });
减少冗余代码
控制器的编写:
使用大驼峰命名,同时注意命名空间和基类控制器的引入:
创建方式:cmd方式 进入到artisan文件所在的目录
php artisan make:controller TestController
当然也可以不可命令来创建。
在app/Http/Controller 目录下创建
控制器路由:
如何使用路由规则调用控制器下的方法。
路由设置格式基本相同,只是将闭包函数换成‘控制器类名@方法名
语法:
Route::请求方法(URL,'控制器类名@方法名')
控件器分目录:
开发中需要分前后台等分目录
语法:
php artisan make:controller 目录名称/控制器文件名
php artisan make:controller Home/UserController
然后在路由里定义:
#例如 Route::get('index','Home\UserController@index'); 这个\ 斜线不能写错
请求:
第一中:
Input类来获取数据
Facades为应用程序的服务容器中可用的类提供了一个「静态」接口。Laravel 自带了很多 facades ,几乎可以用来访问到 Laravel 中所有的服务。Facades 有很多好处,它为我们使用 Laravel 的各种功能提供了简单,易记的语法,让你不需要记住长长的类名来放进入类的引入。
接收用户输入的类:'Input'=>Illuminate\Support\Facades\Input::class
放到config\app.php 里面配置上
然后在控制器里use 加载这个类
Input的方法:
Input::get(‘参数的名字’, ‘如果参数没有被传递使用该默认值’) Input::all(): 获取所有的用户的输入 Input::get(''): 获取单个的用户的输入 Input::only([]): 获取指定几个用户的输入 Input::except([]): 获取指定几个用户的输入以外的所有的参数 Input::has('名称'):判断某个输入的参数是否存在 上述方法即既可以获取get中的信息,也可以获取post中信息。
第二种:Request获取数据
先在方法的形参里 写上 Request $req 例如
public function index(Request $req){}
#方法 //获取参数,第二个参数可以设置默认值 $req->get('参数',''2); $req->input('参数','5'); //获取所有值 $req>all() //检测是否存在 $req->has('参数'); //获取指定部分值 $req->only(['xxx','xxx]) //排除部分值 $req->except(['xxx]); //获取头信息 $req->header('xxx') //获取客户端ip $req->ip(); //获取端口 $req->getPort(); //获取请求方式 $req -> method() //检测请求方式 $req->ismethod('请求的方式'); // 获取完整url $req->ismethod('请求的方式');
第三种方法 辅助函数 request()
//request() 得到一个request对象 //获取指定参数,设置默认参数 request()->get('xxxx',0); //获取全部数据 request()->all(); //白名单 指定要接受那些数据 request()->only(['xx','xxx']); //黑名单 拒绝接收那些数据 request()->except(['xx]) //判断是否存在这个数据 request()->has('xxx'); //判断请求类型
return “PHP是世界上最好的语言”; echo “PHP是世界上最好的语言”;
request()->method()
响应:
所有路由和控制器都会返回一个响应并返回给用户的浏览器。可以使用提供的助手函数 response()来进行操作,当然也可以使用类(Illuminate\Http\Response)来操作。
返回字符串:
在控制器或路由中 echo 或 return 一个字符串就可以了
#例
return “PHP是世界上最好的语言”; echo “PHP是世界上最好的语言”;
附加头信息:
#例 return response('')->header('Myheader','wuchen');
设置cookie:
laravel框架为了安全,它的cookie是加密的
# 设置cookie return response('')->cookie('id',111,10,'/'); ##cookie($name, $value, $minutes, $path, $domain, $secure, $httpOnly) # 读取cookie # 这句要依赖注入 echo $request->cookie('id'); # 辅助函数就不需要注入 return request()->cookie('name');
重定向:
return redirect('路由'); # 路由别名 return redirect()->route('路由别名'); // 页面跳转 //return redirect('index'); # 推荐写法 //return redirect(route('testindex')); # 路由别名 testindex // return redirect()->to('index'); //return redirect()->to(route('testindex')); # 路由别名 testindex //return redirect()->route('testindex'); # 路由别名 testindex
json数据返回:
json 方法会自动将 Content-Type 响应头信息设置为 application/json,并使用 PHP 的 json_encode 函数将数组转换为 JSON 字符串。
#实例 return response()->json([ 'name' => 'zhangsan', 'age' => 22 ]);
文件下载:
于生成强制让用户的浏览器下载指定路径文件的响应。
return response()->download('./robots.txt');
视图:
视图的用途是用来存放应用程序中 HTML 内容,并且能够将你的控制器层(或应用逻辑层)与展现层分开。我们在控制器中使用助手函数【view()】来加载模板。
视图目录位置:resources/views
视图命名:
(1)文件名小写
(2)文件名的后缀是 .blade.php
因为laravel里面有一套模板引擎就是使用blade,可以直接使用标签语法{{ $变量名 }}, 当然也可以使用原生的php 语法显示数据。
分配数据到模板:
语法:
#语法 view (模板文件,数据) view(模板文件名,compact('数据')) view(模板文件)->with(‘名’,‘值’) view(模板文件名称)->with(关联数组)
加个@ 防止和前端js框架冲突
{{-- 注释内容--}} 不会被解析到页面
使用函数:
可以在blade模板中直接使用php函数
{{php函数名()}}
先更到这~