首页
关于
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-08-11
laravel的RESTful实现:RESTful资源控制器-通过laravel 学习RESTful
laravel的RESTful实现:RESTful资源控制器-通过laravel 学习RESTfulRESTful 资源控制器资源控制器让你可以轻松地创建与资源相关的 RESTful 控制器.Laravel 的资源路由将典型的「CURD (增删改查)」路由分配给具有单行代码的控制器。例如,你希望创建一个控制器来处理保存 "照片" 应用的所有 HTTP 请求。使用 Artisan 命令 make:controller ,我们可以快速创建这样一个控制器:php artisan make:controller PhotoController --resource这个命令将会生成一个控制器 app/Http/Controllers/PhotoController.php 。其中包括每个可用资源操作的方法。接下来,你可以给控制器注册一个资源路由:Route::resource('photos', 'PhotoController');这个单一的路由声明创建了多个路由来处理资源上的各种行为。用来处理各式各样和相片资源相关的的 RESTful 行为.生成的控制器为每个行为保留了方法,包括了关于处理 HTTP 动词和 URLs 的声明注释。你可以通过将数组传参到 resources 方法中的方式来一次性的创建多个资源控制器:Route::resources(['photos' => 'PhotoController', 'posts' => 'PostController']);资源控制器操作处理HTTP 方法 URI 动作 含义 路由名称GET /photos index 查看photos列表 photos.indexGET /photos/create create 打开添加页面 photos.createPOST /photos store 添加保存 photos.storeGET /photos/{photo} show 查看详情 photos.showGET /photos/{photo}/edit edit 打开编辑页面 photos.editPUT/PATCH /photos/{photo} update 编辑保存 photos.updateDELETE /photos/{photo} destroy 删除一个photo photos.destroy注 PUT为全部更新,PATCH为部分更新。指定资源模型如果你使用了路由模型绑定,并且想在资源控制器的方法中使用类型提示,你可以在生成控制器的时候使用 --model 选项:php artisan make:controller PhotoController --resource --model=Photo伪造表单方法因为 HTML 的表单不能生成 PUT,PATCH,和 DELETE 请求,所以你需要添加一个隐藏的 _method 字段来伪造 HTTP 动作。这个 Blade 指令 @method 可以为你创造这个字段: @method('PUT') 部分资源路由当声明资源路由时,你可以指定控制器处理的部分行为,而不是所有默认的行为:Route::resource('photos', 'PhotoController')->only(['index', 'show']);Route::resource('photos', 'PhotoController')->except(['create', 'store', 'update', 'destroy']);API 资源路由当声明用于 APIs 的资源路由时,通常需要排除显示 HTML 模板的路由(如 create 和 edit )。为了方便起见,你可以使用 apiResource 方法自动排除这两个路由:Route::apiResource('photos', 'PhotoController');你可以传递一个数组给 apiResources 方法来同时注册多个 API 资源控制器:Route::apiResources(['photos' => 'PhotoController', 'posts' => 'PostController']);要快速生成不包含 create 或 edit 方法的用于开发接口的资源控制器,请在执行 make:controller 命令时使用 --api 开关:php artisan make:controller API/PhotoController --api命名资源路由默认情况下,所有的资源控制器行为都有一个路由名称。你可以传入 names 数组来覆盖这些名称:Route::resource('photos', 'PhotoController')->names(['create' => 'photos.build']);命名资源路由参数默认情况下,Route::resource 会根据资源名称的「单数」形式创建资源路由的路由参数。你可以在选项数组中传入 parameters 参数来轻松地覆盖每个资源。parameters 数组应该是资源名称和参数名称的关联数组:Route::resource('users', 'AdminUserController')->parameters(['users' => 'admin_user']);上例将会为资源的 show 路由生成如下的 URI :/users/{admin_user}本地化资源 URI默认情况下,Route::resource 将会用英文动词创建资源 URI。如果需要本地化 create 和 edit 行为动作名,可以在 AppServiceProvider 的 boot 中使用 Route::resourceVerbs 方法实现:use Illuminate\Support\Facades\Route;/**引导任何应用服务。 *@return void */public function boot(){Route::resourceVerbs([ 'create' => 'crear', 'edit' => 'editar', ]);}动作被自定义后,像 Route::resource('fotos', 'PhotoController') 这样注册的资源路由将会产生如下的 URI:/fotos/crear/fotos/{foto}/editar补充资源控制器如果你想在默认的资源路由中增加额外的路由,你应该在 Route::resource 之前定义这些路由。否则由 resource 方法定义的路由可能会无意中优先于你补充的路由:Route::get('photos/popular', 'PhotoController@method');Route::resource('photos', 'PhotoController');以上代码适用于laravel 6.x。
2023年08月11日
17 阅读
0 评论
0 点赞
2023-08-11
PHP中闭包Closure::bind详解
PHP中闭包Closure::bind详解最近在看laravel底层代码时 ,发现代码中很多Closure::bind用法,查询各种资料,一直对它的使用一直半解(网上大多都是抄袭教材,解释的不清楚),还好经过我不懈努力,终于弄懂了其中道理。1、在正式解释前我们先了解一些基础的东西(稍安勿躁,磨刀不误砍柴工。大多说看不懂其用法的人,主要还是基础不牢)。php中 闭包我们也可以叫做匿名函数,匿名函数不了解的可以自行补一下,我这边简单举例:$say = function(){return '我是匿名函数';};//echo $say(); //这是最直接调用匿名函数方式 输出 我是匿名函数function test(Closure $callback){return $callback();}echo test($say); //这是间接调用匿名函数方式 同样输出 我是匿名函数当然也可以这样写 :echo test( function(){return '我是匿名函数';});2、接着我们来说一下php的public、protected、private三种访问控制模式的区别public: 公有类型 在子类中可以通过self::var调用public方法或属性,parent::method调用父类方法在实例中可以能过$obj->var 来调用 public类型的方法或属性protected: 受保护类型在子类中可以通过self::var调用protected方法或属性,parent::method调用父类方法在实例中不能通过$obj->var 来调用 protected类型的方法或属性private: 私有类型该类型的属性或方法只能在该类中使用,在该类的实例、子类中、子类的实例中都不能调用私有类型的属性和方法<?phpclassA{private $name ='王力宏';protected $age ='30';privatestatic $weight ='70kg';public $address ='中国';publicstatic $height ='180cm';}$obj = new A();//echo $obj->name;//报错 Cannot access private property A::$name//echo $obj->age;//报错 Cannot access protected property A::$age//echo A::$weight; //报错 Cannot access private property A::$weightecho $obj->address;//正常 输出 中国echoA::$height;//正常 输出 180cm$fun = function(){$obj = new A();return $obj->address;//实例对象可以获得公有属性, $obj->name等私有属性肯定不行 上面例子已列出报错}echo $fun();//正常 输出 中国$fun2 = function(){returnA::$height;// 类可以直接访问公有静态属性,但A::$weight肯定不行,因为weight为私有属性}echo $fun2();//正常 输出 180cm3、在以上都理解的情况下 我们来看看这样的情况,有如下匿名函数:$fun = function(){return$this->name;}或者$fun = function(){returnA::$height;}echo $fun();//会报错的其实单独这段代码是肯定不能运行 调用的,因为里面有个$this,程序压根不知道你这个$this是代表那个对象 或 那个类(并且就算知道那个对象或类,该对象是否拥有name属性,如果没有照样会有问题)因此想让其正常运行肯定有前提条件啊(就好比你想遍历某个数组一样,如果这个数组压根你就没提前定义 声明 肯定会报错的)如果这样:<?phpclass A{private $name ='王力宏';protected $age ='30';privatestatic $weight ='70kg';public $address ='中国';publicstatic $height ='180cm';}$fun = function(){return$this->name;} ;$cf = Closure::bind($fun,new A() ,'A'); //该函数返回一个新的 Closure 对象 或者在失败时返回 FALSEecho $cf();//输出 王力宏 为什么呢:bind第一个参数是匿名函数,第二个A实例对象,第三个代表作用域//网上很多讲解是说把匿名函数绑定到了实例对象上了 然后就怎么着......很多新手看了依然一脸懵逼。其实是匿名函数里的$this被指定到了或绑定到了A实例对象上了Closure::bind($fun,new A() );这个使用 你可以理解成对匿名函数做了如下过程:$fun = function(){$this=newA();//你可以想象认为,$this就成了A类的实例对象了,然后在去访问name属性,就和我们正常实例化类访问成员属性一样,上面2中的例子$obj = new A()就是这样,(因为$this是关键字,在这里我们其实不能直接$this = new A();这么写,为了好理解我写成$this,但是原理还是这个意思),但是我们都知道因为name属性是私有的,上面2中我已说过,实例对象不能访问私有属性,那该怎么办呢,于是添加第三个参数就很重要了,一般传入传入一个对应对象,或对应类名(对应的意思是:匿名函数中$this-name想获取name属性值,你这个$this想和那个类和对象绑定在一起呢,就是第二个参数,这时你第三个参数写和第二个参数写一样的对象或类就行了,就是作用域为这个对象或类,这就会让原理的name私有属性变为公有属性)return$this->name;} ;为了加深理解我在举两个例子:<?phpclass A{private $name ='王力宏';protected $age ='30';privatestatic $weight ='70kg';public $address ='中国';publicstatic $height ='180cm';}$fun = function(){$obj = new A();return $obj->address;};echo $fun();//正常 输出 中国 ,该例子其实在上面2中已经讲过了 如果跟这个还不能理解 就不要往下看了 好好补一下基础$fun2 = function(){return$this->address;};//echo $fun2();这样运行会报错 所以我们要进行匿名函数的绑定 是匿名函数里的$this有所指,必要时还要改变要访问属性的作用域$newfun2 = Closure::bind($fun2, new A() );//使用了该函数后 ,该函数返回一个全新的匿名的函数,和原来匿名函数$fun2一模一样,只是其中 $this被指向了A实例对象,这样就能访问address属性了echo $newfun2();//正常 输出 中国,在这里数一下bind这次为什么没添加第三个参数,因为我们要访问的address属性是公有的,一个对象实例是可以直接访问公有属性的,这个例子中只要匿名函数中$this被指向了A对象实例(或者叫绑定也可以),就能访问到公有属性,所以可以不用添加第三个参数,当然你加上了第三个参数 如这样Closure::bind($fun2, new A(), ‘A’ );或Closure::bind($fun2, new A(), nwe A() );不影响 照样运行,就好比把原来公有属性 变为公有属性 不影响的(一般当我们访问的属性为私有属性时,才使用第三个参数改变作用域 ,使其变为公有属性)下面来看最后一例子,再次加深一下理解:<?phpclass A{private $name ='王力宏';protected $age ='30';privatestatic $weight ='70kg';public $address ='中国';publicstatic $height ='180cm';}$fun = function(){returnA::$weight;};//echo $fun(); 运行会报错 因为weight为私有属性 上面2中例子访问height属性是可以的,height为公有属性,所以把weight改成height是可以正常运行的,但是我们现在就想访问这个私有静态属性,我们该怎么办,于是Closure::bind出场了$newfun = Closure::bind($fun,null,'A');//通过bind函数作用,返回一个和$fun匿名函数一模一样的匿名函数,只是该匿名函数中A::$weight, weight属性由私有变成公有属性了。echo $newfun();// 正常 输出 70kg ,为什么第二个参数又成null了呢,因为在该匿名函数中A::$weight 这属于正常类使用啊(php中 类名::公有静态属性,这是正常访问方法,上面2中例子已经说的很清楚了),所以不用绑定到某个对象上去了,于是第二个参数可以省略,唯一遗憾的是weight属性虽是静态属性,但是其权限是private私有属性,于是我们要把私有属性变公有属性就可以了,这时把第三个参数加上去就可以了,第三个参数可以是A类(Closure::bind($fun,null,'A')),也可以是A类的对象实例(Closure::bind($fun,null, new A() )),两种写法都可以,最终第三个参数的添加使私有属性变成了公有属性,(这个例子中当然你非得添加第二个参数肯定也没问题,只要第二个参数是A的实例对象就行Closure::bind($fun,new A(),'A'),不影响,只是说 A::$weight 这种使用方法本身就是正常使用,程序本身就知道你用的是A类,你在去把它指向到A类自己的对象实例上,属于多此一举,因此第二个参数加不加都行,不加写null就行)综上大家应该理解其用法了吧,有时第二个参数为null,有时第三个参数可以不要,这些都跟你匿名函数里 代码中访问的方式紧密相关总结:1、一般匿名函数中有$this->name类似这样用 $this访问属性方式时,你在使用bind绑定时 ,第二个参数肯定要写,写出你绑定那个对象实例,第三个参数要不要呢,要看你访问的这个属性,在绑定对象中的权限属性,如果是private,protected 你要使用第三个参数 使其变为公有属性, 如果本来就是公有,你可以省略,也可以不省略2、一般匿名函数中是 类名::静态属性 类似这样的访问方式(比如例子中A::$weight),你在使用bind绑定时,第二个参数可以写null,也可以写出具体的对象实例,一般写null就行(写了具体对象实例多此一举),第三个参数写不写还是得看你访问的这个静态属性的权限是 private 还是 public,如果是私有private或受保护protected的,你就得第三个参数必须写,才能使其权限变为公有属性 正常访问,如果本来就是公有public可以不用写,可以省略
2023年08月11日
17 阅读
0 评论
0 点赞
2023-08-11
Laravel 将数据表中的数据导出,并生成seed文件
Laravel 将数据表中的数据导出,并生成seed文件在 laravel 开发过程中,我们为了将自己本地数据库中的数据导出给别人用有两种方法:最普通的也就是将自己的数据库用命令行或者图形操作工具导出成 .sql 的文件给对方使用 ,另外一种就是 laravel 提供的数据库 seed 文件,来看看怎么使用 seed :安装isseedcomposer require "orangehill/iseed": "2.1"然后把 seed 添加到 provider 中:'providers' => [ ... Orangehill\Iseed\IseedServiceProvider::class, ],到此 iseed 已经安装好了,下面来看看 iseed 的用法:假如要导出某张表的数据,命令为:``phpphp artisan iseed 表名如果要导出多张表的话,那么在命令后加 , 表名2 导出数据并且强制覆盖:php artisan iseed 表名1[,表名2...]--force导出指定的数据库里指定的表,并生成seed文件: php artisan iseed 表名--database=数据库名最后执行命令重新执行 migrate 文件并且填充 seed 文件数据:php artisan migrate:refresh --seed
2023年08月11日
15 阅读
0 评论
0 点赞
1
2