文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

PHP面试宝典之Laravel篇

2023-09-11 08:50

关注

artisan常用命令?

查看laravel版本:php artisan --version重启队列:php artisan queue:restart监听队列:php artisan queue:listen删除失败队列:php artisan queue:forget列出所有失败队列:php artisan queue:failed创建新的job类:php artisan make:job创建控制器:php artisan make:controller设置最大运行时间:php -d memory_limit=-1清除视图缓存: php artisan view:clear清除缓存:php artisan cache:clear清除路由缓存:php artisan route:cache列出artisan命令列表:php artisan list清理陪住文件缓存:php artisan config:cache

laravel的生命周期?

从入口文件index.php开始

引入composer,利用au to load自动加载第三方依赖

实例化app容器,绑定http、console内核

在http内核中,将中间件注册到路由器

路由器将请求转发到绑定的控制器,进行逻辑处理

处理完成,路由器再将结果分发到响应服务

通过send方法将响应结果输出

最后终止请求和响应,完成整个请求处理和响应

laravel框架的原理和设计模式?

首先laravel是基于mvc设计模式,将应用程序程序分为三个主要部分,控制器、模型、视图

其次laravel有很多核心组件,路由(路由处理请求,映射到控制器)、控制器(实现路由指向的方法)、中间件(在请求到达控制器之前和之后执行一些操作)、请求和响应(request、respone)、视图、数据库、

laravel中使用到的设计模式和技术:依赖注入(request请求)、事件系统(event和订阅者模式)、观察者模式、门面模式等

ServiceProvider服务提供者?

将服务注册到容器中,将创建权限交给容器

低耦合,当服务发生变动时,很少改动
例:视图服务提供者(将用户菜单栏目异步的形式显示到视图中去)

laravel门面技术?

laravel的所有门面都定义在facade命名空间下
门面为程序中绑定的类,提供了一个静态接口,我们可以不用实例化类,直接通过静态方法,使用这些类;如:cache缓存,db数据库,redis缓存,view视图,session等

注意:门面使用要谨慎,不易过多,容易导致类作用范围的膨胀,导致类越来越大

laravel依赖注入?

构造函数注入、属性注入、方法注入

当一个对象a,需要另一个对象b协助时,通常情况下,需要在a中创建b的实例,但依赖注入是使用容器c创建b的实例,然后通过传参的方式,注入到a中,再使用a直接调用b中的方法,也就是说在a中不需要创建b的实例;例:request请求就是依赖注入

laravel的中间件?

全局中间件、路由中间件、路由组中间件

进的顺序:全局中间件》路由组中间件》路由中间件

出的顺序:路由中间件》路由组中间件》全局中间件

定义中间件类(middleware目录下新增)

注册中间件(kernel.php文件中,找到对应的分组,引入中间件类)

分配中间件(控制器构造方法中调用,或着在路由最后调用)
例:auth中间件、cookie中间件、登录验证、空白字符过滤、伪造请求验证等

laravel的事件系统(event)是为了解决什么问题?

实现系统解耦,一个对象状态改变时,给其他依赖于它的对象通知,并自动更新;实现了系统解耦,保证高度的协作,利用的是观察者模式

事件监听器?

注册事件和监听者;EventServiceProvider中listen数组中注册事件和监听者

定义事件类;app/events目录下,构造方法,接收并创建对象

定义监听者类;app/listeners目录下,构造方法,接收事件实例,handle方法处理业务

分发事件;event:dispatch(参数)或者event(事件对象),当事件发生,监听者handle方法被触发

事件订阅者?

创建订阅者类;在app/listeners目录下,其中subscribe方法分配事件(事件=>订阅者类中的方法名)

注册订阅者;EventServiceProvider中$subscribe属性中添加订阅者类

分发事件;当事件发生,订阅者根据subscribe中的对应关系,找到对应方法并执行

事件监听器和事件订阅者的区别?

事件监听器:一个监听器只能监听一个事件,每个事件可以有多个监听器;例:一件事的发生可能会导致后续三四个事件的触发

订阅者模式:一个类中监听多个事件;例:一个日志类,可以监听多个事件,例如登录,注册,退出等

laravel的路由是怎么设计的?有什么用?

路由系统是基于:http请求方法(如:get、post、put等)和url设计的

路由被定位为url和控制器方法之间的映射关系

路由组的作用?

用于组织路由,为它们应用共同的中间件和命名空间

什么是roc容器?

roc容器是用来解析一些不依赖于容器的类和接口,提高性能和降低内存占用。不是一个独立的容器,而是一种实现依赖注入的技术

在a类的构造方法中传入b类,在AppServiceProvider类的注册方法中定义一个解析器

roc容器和依赖注入的区别?

两者不同概念,依赖注入是设计模式,roc是laravel中的一种特殊容器

roc容器是一种轻量级的解析器技术,仅使用于一些简单的类和接口的解析;依赖注入可以实现更复杂的依赖注入情况

laravel的模型层是如何实现事务的?

通过db类的事务方法:transAction 方法实现;
在该方法中可以操作多个模型或数据表,全部成功,则提交事务,有一个失败,就回滚事务;
参考:事物的底层实现

yii框架的生命周期?

入口文件,web/index.php

入口脚本加载应用配置,并创建一个应用实例

应用实例通过请求组件,解析请求的路由

应用创建一个控制器去处理请求

控制器创建一个操作实例并针对操作执行过滤器

如果任何一个过滤器返回失败,则操作退出

如果所有过滤器都通过,操作将被执行

操作会加载一个数据模型,或许是来自数据库

操作会渲染一个视图,把数据模型提供给它

渲染结果返回给响应组件

响应组件发送渲染结果给用户浏览器

yii框架目录结构?

frontend :前台应用;

backend:后台应用;控制器、模型、视图目录

console:命令行

common:公共文件

vendor:第三方类库,composer自动加载

控制器:TestOneController.php

路由:test-one/add

方法名:actionAdd,必须加action

视图显示:$this->render(‘add’)

重定向方法:$this->redirect([‘test/show’]);

session对象:YII::app->session;

判断session是否开启:$session->isAction;

开启session:$session->open();

模型:静态方法tableName中return 表名即可

视图输出:,

yii2和yii的区别

yii2中使用了composer

事务,增加了begin和commit事务事件,在开始事务和提交事务时触发

yii2引入了资源包的概念,通过assets目录下的appasset类

数据库使用

查询一条:
1:是user::model()->find(条件)

是user::find()->where()->one()

查询多条:
1:是user::model()->findAll()

是user::find()->where()->all()

新增对象转数组方法:
asArray()方法直接将结果转为数组

yii2查询方法:

user::find()->one()user::find()->all()user::find()->count()user::find()->each(10):每次取10条,迭代查询user::find()->batch(10):每次取10条where->addwhere()->orwhere

laravel、tp、yii框架的优缺点

laravel:
优点:文档丰富、三方类库、安全机制、中间件和路由过滤、错误机制、支持composer、支持各种设计模式

缺点:基于组件比较臃肿、性能稍低、较复杂不易上手

tp:
优点:轻量级中型框架、易上手、文档丰富、支持composer

缺点:对ajax不优化、目录结构混乱、上手易、深入难

yii:
优点:高性能、适用于大型项目、纯oop、模型使用方便、开发快、运行快、支持composer

缺点:对model层考虑少,文档少,视图中包含php代码

laravel和tp的区别?

框架架构:laravel采用mvc架构,tpc采用mvc+service+repository架构。laravel在代码组织和架构上更规范化,tp更自由

技术特点:laravel使用了一系列先进技术,如:事件,命令行工具,blade模版引擎,orm等,而tp更注重对传统php开发方式的支持,如原生sql和smarty模版引擎

文档和社区:laravel的文档和社区活跃度更高

学习曲线:laravel学习曲线相对陡峭,需要花费更多时间学习,tp更容易上手,适合初学者

使用场景:laravel适合大型、复杂的web应用,如企业级cms,电商网站等;tp适合中小型web应用,如个人博客,小型商城等

tp3.2和tp5的区别:

url和路由的改变:新增(路由分组、闭包定义、路由变量规则、组合变量)

模块和控制器的改变:应用命名空间统一为app而不是模块名,类名不带controller后缀,采用return返回,废除前置和后置方法,url访问自动定位控制器,增加了request和response

数据库改变:查询返回对象,支持链式查询(多个where),支持闭包查询,分块查询,视图查询,增加sql监听事件,废除单字母函数改用db,model

常量和助手函数的改变:废除了一些常量(is_get,is_post等)res

来源地址:https://blog.csdn.net/qq_38989173/article/details/130450480

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯