首页
关于
Search
1
给你10个市场数据调研报告的免费下载网站!以后竞品数据就从这里找!
182 阅读
2
php接口优化 使用curl_multi_init批量请求
144 阅读
3
《从菜鸟到大师之路 ElasticSearch 篇》
107 阅读
4
2024年备考系统架构设计师
104 阅读
5
PHP 文件I/O
92 阅读
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
登录
Search
标签搜索
php函数
php语法
性能优化
安全
错误和异常处理
问题
vue
Composer
Session
缓存
框架
Swoole
api
并发
异步
正则表达式
php-fpm
mysql 索引
开发规范
协程
dafenqi
累计撰写
786
篇文章
累计收到
28
条评论
首页
栏目
php
thinkphp
laravel
工具
开源
mysql
数据结构
总结
思维逻辑
令人感动的创富故事
读书笔记
前端
vue
js
css
书籍
开源之旅
架构
消息队列
docker
教程
代码片段
副业
redis
服务器
nginx
linux
科普
java
c
ElasticSearch
测试
php进阶
php基础
页面
关于
搜索到
8
篇与
的结果
2023-12-29
使用Laravel集成来管理REST API的最佳实践
使用Laravel集成来管理REST API的最佳实践在现代Web应用程序开发中,RESTful API已经成为了非常重要的一部分。而Laravel是一个流行的PHP框架,它可以方便地用来构建和管理REST API。在本文中,我们将介绍使用Laravel集成来管理REST API的最佳实践。我们将讨论如何使用Laravel集成来组织和管理API路由、请求和响应,以及如何使用相关的中间件和控制器来进行身份验证和访问控制。路由在Laravel中,路由是一种管理应用程序请求的方式。通常,我们使用路由来告诉Laravel如何响应特定的HTTP请求。为了组织和管理RESTful API路由,我们可以使用Laravel集成来创建基于资源的路由和API路由组。基于资源的路由一个基于资源的路由是指用于进行CRUD(创建、读取、更新、删除)操作的路由。在Laravel中,我们可以使用Route::resource()方法来创建基于资源的路由。这个方法将会在我们应用程序中自动地创建七个不同的路由。例如,Route::resource('users', 'UserController')将会创建以下七个路由:Verb Path Action Route NameGET /users index users.indexGET /users/create create users.createPOST /users store users.storeGET /users/{user} show users.showGET /users/{user}/edit edit users.editPUT/PATCH /users/{user} update users.updateDELETE /users/{user} destroy users.destroyAPI路由组另一个常见的RESTful API路由结构是路由组。我们一般使用路由组来组织具有相关请求URI的多个路由。例如,我们可以创建一个API路由组来组织我们的API路由,并在API路由组的每个路由中添加一个api前缀。这样的话,我们就可以非常容易地识别出我们应用程序中的API路由。在Laravel中,我们可以像下面这样来定义API路由组:Route::prefix('api')->group(function () {Route::get('/users', 'UserController@index'); Route::get('/users/{id}', 'UserController@show'); Route::post('/users', 'UserController@store'); Route::put('/users/{id}', 'UserController@update'); Route::delete('/users/{id}', 'UserController@destroy'); });请求和响应访问API资源的三种类型的请求是GET、POST、和DELETE。使用请求对象(Request)和响应对象(Response)可以轻松地在Laravel应用程序中处理这些请求。在Laravel中,我们可以在控制器方法中使用Request和Response对象来管理请求和响应的所有内容。请求我们可以使用Request对象来处理来自客户端的请求。例如,我们可以从Request对象中获取请求的URL,查询参数或Cookie信息。在控制器方法中,我们可以像下面这样声明一个Request对象:public function index(Request $request) {$users = User::all(); return response()->json(['users' => $users]); }在上面的例子中,我们使用Request对象来获取客户端的请求,然后使用response()方法将结果转换为JSON格式的数据并返回给客户端。响应使用Response对象我们可以发送HTTP响应到客户端。在控制器方法中,我们可以像下面这样使用一个Response对象来发送一个带有JSON数据的HTTP响应:public function index() {$users = User::all(); return response()->json(['users' => $users]); }在上面的例子中,我们使用response()方法来创建一个新的HTTP响应,该方法将数据转换为JSON格式并将其返回给客户端。中间件在Laravel中,中间件是一个对请求和响应进行处理的机制。中间件被称为在请求到达应用程序之前或响应到达客户端之后运行的代码。使用中间件,我们可以轻松地实现身份验证和访问控制机制。Laravel提供了多个默认的中间件,如auth和guest,并且我们还可以轻松地定义自己的中间件。身份验证在Laravel中,身份验证通常使用默认的auth中间件来实现。在使用auth中间件时,我们只需要将中间件添加到路由或控制器方法中即可。例如,我们可以像下面这样来限制API路由只能由经过身份验证的用户才能访问:Route::middleware('auth:api')->group(function () {Route::get('/users', 'UserController@index'); Route::get('/users/{id}', 'UserController@show'); Route::post('/users', 'UserController@store'); Route::put('/users/{id}', 'UserController@update'); Route::delete('/users/{id}', 'UserController@destroy');});上面的例子中,我们使用auth:api中间件来指定API路由需要身份验证。这样的话,只有经过身份验证的用户才能访问API路由。访问控制使用中间件,我们还可以实现访问控制。在Laravel中,我们可以使用自定义的中间件来实现访问控制。例如,我们可以定义一个Admin中间件,该中间件将检查当前用户是否具有管理员权限,并且只有具有管理员权限的用户才能访问API路由。我们可以像下面这样来定义一个自定义的Admin中间件:class AdminMiddleware {public function handle($request, Closure $next) { // Check if user is an admin if(!$request->user()->isAdmin()) { return response()->json([ 'message' => 'You do not have permission to access this resource' ], 403); } return $next($request); } }在上面的例子中,我们定义了一个自定义的Admin中间件,并在中间件的处理方法中检查当前用户是否具有管理员权限。如果用户没有管理员权限,中间件将会返回一个HTTP 403 Forbidden响应。如果用户具有管理员权限,中间件将会调用$next闭包来继续执行当前请求。控制器在Laravel中,控制器是一个用于处理应用程序请求的类。控制器的作用是将请求传递给模型,并负责将响应返回给客户端。在RESTful API中,我们可以使用控制器来管理多个HTTP请求,这些HTTP请求将用于对资源进行读取、创建、更新和删除操作。在Laravel中,我们可以像下面这样来定义一个控制器:class UserController extends Controller {public function index() { ! } public function show($id) { ! } public function store(Request $request) { ! } public function update(Request $request, $id) { ! } public function destroy($id) { ! } }在上面的例子中,我们定义了一个名为UserController的控制器,并为其添加了五个方法,这些方法分别对应HTTP GET、POST、PUT、PATCH和DELETE请求。结论使用Laravel集成来管理REST API是一个非常好的选择。本文介绍了如何使用Laravel来组织和管理API路由、请求和响应,以及如何使用相关的中间件和控制器来进行身份验证和访问控制。此外,我们还提供了一些额外的代码示例,以帮助您更好地理解如何使用Laravel集成来管理REST API。
2023年12月29日
8 阅读
0 评论
0 点赞
2023-08-11
如何选择laravel的身份认证系统
如何选择laravel的身份认证系统最近经常有人问如何使用laravel的身份认证功能,因为laravel的身份认证方式比较多,laravel的作者最近专门写了一文章来解释说明,以下为译文:laravel认证生态系统概述Laravel提供了一些与身份验证相关的软件包。在继续之前,我们将回顾Laravel中的常规身份验证生态系统,并讨论每个软件包的预期目的。首先,请考虑身份验证的工作原理。使用网络浏览器时,用户将通过登录表单提供其用户名和密码。如果这些凭据正确,则应用程序将在用户的会话中存储有关经过身份验证的用户的信息。发布给浏览器的cookie包含会话ID,以便对应用程序的后续请求可以将用户与正确的会话相关联。接收到会话cookie后,应用程序将基于会话ID检索会话数据,注意身份验证信息已存储在会话中,并将用户视为“已身份验证”。当远程服务需要进行身份验证才能访问API时,通常不使用cookie,因为没有Web浏览器。而是,远程服务根据每个请求将API令牌发送到API。应用程序可以对照有效API令牌表验证传入令牌,并“认证”与该API令牌相关联的用户正在执行的请求。Laravel的内置浏览器身份验证服务Laravel包含内置的身份验证和会话服务,通常可以通过Auth和SessionFacades访问它们。这些功能为从Web浏览器发起的请求提供基于cookie的身份验证。它们提供了允许您验证用户凭据并验证用户身份的方法。另外,这些服务将自动在用户的会话中存储正确的数据并发出正确的会话cookie。本文档中包含有关如何使用这些服务的讨论。Jetstream / Fortify如本文档中所述,您可以手动与这些身份验证服务交互以构建应用程序自己的身份验证层。但是,为了帮助您更快地入门,我们发布了免费软件包,这些软件包为整个身份验证层提供了强大而现代的脚手架。这些软件包是Laravel Jetstream和Laravel Fortify。Laravel Fortify是Laravel的无头(headless)身份验证后端,它实现了本文档中的许多功能,包括基于cookie的身份验证以及其他功能,例如( two-factor)双因素身份验证和电子邮件验证。Laravel Jetstream是一个UI,它使用由Tailwind CSS,Laravel Livewire和/或Inertia.js提供支持的美观、现代的UI来使用Fortify的身份验证服务并将其公开。Laravel Jetstream除了提供基于浏览器的cookie身份验证之外,还包括与Laravel Sanctum的内置集成以提供API令牌身份验证。Laravel的API身份验证产品将在下面讨论。Laravel的API身份验证服务Laravel提供了两个可选的软件包来帮助您管理API令牌和认证使用API令牌发出的请求:Passport和Sanctum。请注意,这些库和基于Laravel的内置cookie的身份验证库不是互斥的。这些库主要关注API令牌身份验证,而内置身份验证服务则关注基于cookie的浏览器身份验证。许多应用程序将同时使用Laravel的基于内置cookie的身份验证服务和Laravel的API身份验证程序包之一。PassportPassport是OAuth2身份验证提供程序,提供各种OAuth2“授权类型”,使您可以颁发各种类型的令牌。通常,这是用于API身份验证的强大而复杂的程序包。但是,大多数应用程序都不需要OAuth2规范提供的复杂功能,这会使用户和开发人员感到困惑。另外,从历史上看,开发人员对于如何使用Passport等OAuth2身份验证提供程序对SPA应用程序或移动应用程序进行身份验证感到困惑。Sanctum为了应对OAuth2的复杂性和开发人员的困惑,我们着手构建一个更简单,更简化的身份验证程序包,该程序包既可以处理来自Web浏览器的第一方Web请求,也可以处理通过令牌的API请求。Laravel Sanctum的发布实现了这一目标,对于那些除了API之外还将提供第一方Web UI或将由单页面应用程序提供支持的应用程序,Laravel Sanctum的发布应被视为首选和推荐的身份验证程序包。与后端Laravel应用程序或提供移动客户端的应用程序分开存在。Laravel Sanctum是Web / API混合身份验证程序包,可以管理应用程序的整个身份验证过程。这是可能的,因为当基于Sanctum的应用程序收到请求时,Sanctum将首先确定该请求是否包括引用已验证会话的会话cookie。Sanctum通过调用我们前面讨论的Laravel的内置身份验证服务来实现此目的。如果未通过会话cookie对请求进行身份验证,Sanctum将检查请求中的API令牌。如果存在API令牌,Sanctum将使用该令牌对请求进行身份验证。要了解有关此过程的更多信息,请查阅Sanctum的“工作原理”文档。Laravel Sanctum是我们选择包含在Laravel Jetstream身份验脚手架中的API程序包,因为我们认为它最适合大多数Web应用程序身份验证需求。总结与选择总之,如果将使用浏览器访问您的应用程序,则您的应用程序将使用Laravel的内置身份验证服务。接下来,如果您的应用程序提供了API,则您将在Passport或Sanctum之间进行选择,以为您的应用程序提供API令牌认证。通常,应该尽可能使用Sanctum,因为它是API身份验证,SPA身份验证和移动身份验证的简单,完整的解决方案,包括对“范围(scopes)”或“功能(abilities)”的支持。当您的应用程序绝对地需要OAuth2规范提供的所有功能时,可以选择Passport。而且,如果您想快速入门,我们很高兴向您推荐Laravel Jetstream,这是启动新的Laravel应用程序的快速方法,该应用程序已经使用了我们首选的Laravel内置身份验证服务和Laravel Sanctum身份验证。用以下一张图示例如何选择:参考 http://laravel.p2hp.com/docs/8.x/authentication#ecosystem-overview
2023年08月11日
14 阅读
0 评论
0 点赞
2023-08-11
laravel万能路由( 自动路由、动态路由)实现方法分享
laravel万能路由( 自动路由、动态路由)实现方法分享有了万能路由就不用一条一条添加路由了,很方便。如果你要用资源控制器做Restful接口,那还是要写资源路由的,注意,资源路由一定要写在最上面。Route::resource('photos', 'PhotoController');//资源路由要写在上面。//万能路由Route::group(['middleware'=>['web']],function (){Route::any("/{module}/{controller}/{action}",function ($module,$class,$action){ $class = "App\\Http\\Controllers\$module\\".ucfirst(strtolower($class)).'Controller'; if(class_exists($class)) { $ctrl = \App::make($class); return \App::call([$ctrl, $action]); } return abort(404); })->where([ 'module'=>'[0-9a-zA-Z]+','class' => '[0-9a-zA-Z]+', 'action' => '[0-9a-zA-Z]+']);});在你的控制器方法中获取参数要用(Request $request)public function index(Request $request){ $name = $request->input('name'); echo $name; }友好url:如果你想拥有http://www.laravel65.com/Haha/photo/index/id/22/tag/php 这样的友好url请使用以下Route::resource('photos', 'PhotoController');//资源路由要写在上面。Route::get('/', function () {return view('welcome');});//万能路由Route::group(['middleware'=>['web']],function (){Route::any("/{search}",function ($search){ $urls=explode('/',$search); $module=$urls[0] ?? 'Index'; $className=$urls[1] ?? 'Index'; $action=$urls[2] ?? 'Index'; $class ="App\\Http\\Controllers\$module\\".ucfirst(strtolower($className)).'Controller'; $ctrl = \App::make($class); return \App::call([$ctrl, $action],[$search]); // } return abort(404); })->where('search', '.*');});同时在你控制器的方法中使用$search参数接收参数public function index(Request $request,$search){ var_dump($search); $name = $request->input('id'); echo 'index' .$name; }
2023年08月11日
10 阅读
0 评论
0 点赞
2023-08-11
Laravel 登录失败次数限制
Laravel 登录失败次数限制在用户身份验证的情况下,Laravel 具有内置的身份验证系统。我们可以根据要求轻松修改它。身份验证中包含的功能之一是Throttling.为什么我们需要throttling保护?基本上,throttling是用来保护暴力攻击的。它将在一定时间内检查登录尝试。在短登录中,throttling会计算用户或机器人尝试失败的登录尝试次数。使用自定义登录实现限制默认情况下,在内置身份验证控制器中实现限制。但是,如果我们需要实现它到自定义登录呢?实现自定义登录限制非常容易。首先,我们必须将ThrottlesLogins trait包含到您的控制器中。use Illuminate\Foundation\Auth\ThrottlesLogins;现在,将此ThrottlesLogins trait 加到控制器中。namespace App\Http\Controllers;use Illuminate\Http\Request;use Illuminate\Foundation\Auth\ThrottlesLogins;class AuthController extends Controller{use ThrottlesLogins; ......现在转到用于对用户进行身份验证的方法。在我的例子中,我使用了 login() POST 方法。并粘贴以下代码:public function login(Request $request){// Authenticate Inputs $request->validate([ 'username' => 'required', 'password' => 'required|min:6|max:18' ]); // If the class is using the ThrottlesLogins trait, we can automatically throttle // the login attempts for this application. We'll key this by the username and // the IP address of the client making these requests into this application. if (method_exists($this, 'hasTooManyLoginAttempts') && $this->hasTooManyLoginAttempts($request)) { $this->fireLockoutEvent($request); return $this->sendLockoutResponse($request); } .......首先,我们验证了用户提交的输入,然后实现了hasTooManyLoginAttempts() 方法。此方法将检查用户在某个时间是否执行过一定数量的失败尝试,然后系统将通过sendLockoutResponse() 方法阻止该用户。现在,我们必须通过incrementLoginAttempts()方法指示对ThrottlesLogins trait的失败登录尝试。if( Auth::attempt(['username' => $username, 'password' => $password]) ){// Redirect to appropriate dashboard }else {// If the login attempt was unsuccessful we will increment the number of attempts // to login and redirect the user back to the login form. Of course, when this // user surpasses their maximum number of attempts they will get locked out. $this->incrementLoginAttempts($request); return redirect()->back() ->withInput($request->all()) ->withErrors(['error' => 'Please check your username / password.']);}您还可以通过$maxAttempts和$decayMinutes属性更改允许的最大尝试次数和限制的分钟数。在这里,您可以找到完整的代码。<?phpnamespace App\Http\Controllers;use Illuminate\Http\Request;use Illuminate\Foundation\Auth\ThrottlesLogins;class AuthController extends Controller{use ThrottlesLogins; /** * The maximum number of attempts to allow. * * @return int */ protected $maxAttempts = 5; /** * The number of minutes to throttle for. * * @return int */ protected $decayMinutes = 1; public function login(Request $request) { // Authenticate Inputs $request->validate([ 'username' => 'required', 'password' => 'required|min:6|max:18' ]); // If the class is using the ThrottlesLogins trait, we can automatically throttle // the login attempts for this application. We'll key this by the username and // the IP address of the client making these requests into this application. if (method_exists($this, 'hasTooManyLoginAttempts') && $this->hasTooManyLoginAttempts($request)) { $this->fireLockoutEvent($request); return $this->sendLockoutResponse($request); } $username = $request->username; $password = $request->password; if( Auth::attempt(['username' => $username, 'password' => $password]) ){ // Redirect to appropriate dashboard } else { // If the login attempt was unsuccessful we will increment the number of attempts // to login and redirect the user back to the login form. Of course, when this // user surpasses their maximum number of attempts they will get locked out. $this->incrementLoginAttempts($request); return redirect()->back() ->withInput($request->all()) ->withErrors(['error' => 'Please check your username / password.']); } }}Related Posts:
2023年08月11日
15 阅读
0 评论
0 点赞
2023-08-11
laravel-admin安装使用
laravel-admin安装使用laravel-admin是一个超级棒的PHP后台框架,只用写极其少量的代码,就可以开发后台功能,不用写方法,不用创建与修改模板,开发速度是其它框架的N倍。堪称用最少的时间构建出功能完善的管理后台!!!安装方法:一.可参考(https://github.com/w3yyb/laravel-admin-skeleton,使用laravel 6)二.使用laravel 71.安装laravel 7.xcomposer create-project --prefer-dist laravel/laravel blog2.mysql新建数据库laraveladmin3.修改.env文件数据库信息DB_CONNECTION=mysqlDB_HOST=127.0.0.1DB_PORT=3306DB_DATABASE=laraveladminDB_USERNAME=rootDB_PASSWORD=××××××4.安装laravel-admincomposer require encore/laravel-adminphp artisan vendor:publish --provider="Encore\Admin\AdminServiceProvider"php artisan admin:install在config/filesystems.php中disks中添加admin:'disks'=> ['local'=> ['driver'=>'local','root'=>storage_path('app'),],'public'=> ['driver'=>'local','root'=>storage_path('app/public'),'url'=>env('APP_URL').'/storage','visibility'=>'public',],'s3'=> ['driver'=>'s3','key'=>env('AWS_ACCESS_KEY_ID'),'secret'=>env('AWS_SECRET_ACCESS_KEY'),'region'=>env('AWS_DEFAULT_REGION'),'bucket'=>env('AWS_BUCKET'),'url'=>env('AWS_URL'),'endpoint'=>env('AWS_ENDPOINT'),],'admin'=> ['driver'=>'local','root'=>public_path('upload'),'visibility'=>'public','url'=>env('APP_URL').'/upload/',],6.运行: php artisan serve打开路由:http://127.0.0.1:8000/admin认证:账号 admin,密码 adminhttp://www.dcatadmin.com/ 这个是 基于laravel-admin开发的,比laravel-admin更好,推荐使用。
2023年08月11日
12 阅读
0 评论
0 点赞
1
2