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的生命周期?
1:从入口文件index.php开始
2:引入composer,利用au to load自动加载第三方依赖
3:实例化app容器,绑定http、console内核
4:在http内核中,将中间件注册到路由器
5:路由器将请求转发到绑定的控制器,进行逻辑处理
6:处理完成,路由器再将结果分发到响应服务
7:通过send方法将响应结果输出
8:最后终止请求和响应,完成整个请求处理和响应
laravel框架的原理和设计模式?
1:首先laravel是基于mvc设计模式,将应用程序程序分为三个主要部分,控制器、模型、视图
2:其次laravel有很多核心组件,路由(路由处理请求,映射到控制器)、控制器(实现路由指向的方法)、中间件(在请求到达控制器之前和之后执行一些操作)、请求和响应(request、respone)、视图、数据库、
3:laravel中使用到的设计模式和技术:依赖注入(request请求)、事件系统(event和订阅者模式)、观察者模式、门面模式等
ServiceProvider服务提供者?
1:将服务注册到容器中,将创建权限交给容器
2:低耦合,当服务发生变动时,很少改动
例:视图服务提供者(将用户菜单栏目异步的形式显示到视图中去)
laravel门面技术?
laravel的所有门面都定义在facade命名空间下
门面为程序中绑定的类,提供了一个静态接口,我们可以不用实例化类,直接通过静态方法,使用这些类;如:cache缓存,db数据库,redis缓存,view视图,session等
注意:门面使用要谨慎,不易过多,容易导致类作用范围的膨胀,导致类越来越大
laravel依赖注入?
构造函数注入、属性注入、方法注入
当一个对象a,需要另一个对象b协助时,通常情况下,需要在a中创建b的实例,但依赖注入是使用容器c创建b的实例,然后通过传参的方式,注入到a中,再使用a直接调用b中的方法,也就是说在a中不需要创建b的实例;例:request请求就是依赖注入
laravel的中间件?
全局中间件、路由中间件、路由组中间件
进的顺序:全局中间件》路由组中间件》路由中间件
出的顺序:路由中间件》路由组中间件》全局中间件
1:定义中间件类(middleware目录下新增)
2:注册中间件(kernel.php文件中,找到对应的分组,引入中间件类)
3:分配中间件(控制器构造方法中调用,或着在路由最后调用)
例:auth中间件、cookie中间件、登录验证、空白字符过滤、伪造请求验证等
laravel的事件系统(event)是为了解决什么问题?
实现系统解耦,一个对象状态改变时,给其他依赖于它的对象通知,并自动更新;实现了系统解耦,保证高度的协作,利用的是观察者模式
事件监听器?
1:注册事件和监听者;EventServiceProvider中listen数组中注册事件和监听者
2:定义事件类;app/events目录下,构造方法,接收并创建对象
3:定义监听者类;app/listeners目录下,构造方法,接收事件实例,handle方法处理业务
4:分发事件;event:dispatch(参数)或者event(事件对象),当事件发生,监听者handle方法被触发
事件订阅者?
1: 创建订阅者类;在app/listeners目录下,其中subscribe方法分配事件(事件=>订阅者类中的方法名)
2:注册订阅者;EventServiceProvider中$subscribe属性中添加订阅者类
3:分发事件;当事件发生,订阅者根据subscribe中的对应关系,找到对应方法并执行
事件监听器和事件订阅者的区别?
事件监听器:一个监听器只能监听一个事件,每个事件可以有多个监听器;例:一件事的发生可能会导致后续三四个事件的触发
订阅者模式:一个类中监听多个事件;例:一个日志类,可以监听多个事件,例如登录,注册,退出等
laravel的路由是怎么设计的?有什么用?
路由系统是基于:http请求方法(如:get、post、put等)和url设计的
路由被定位为url和控制器方法之间的映射关系
路由组的作用?
用于组织路由,为它们应用共同的中间件和命名空间
什么是roc容器?
roc容器是用来解析一些不依赖于容器的类和接口,提高性能和降低内存占用。不是一个独立的容器,而是一种实现依赖注入的技术
在a类的构造方法中传入b类,在AppServiceProvider类的注册方法中定义一个解析器
roc容器和依赖注入的区别?
两者不同概念,依赖注入是设计模式,roc是laravel中的一种特殊容器
roc容器是一种轻量级的解析器技术,仅使用于一些简单的类和接口的解析;依赖注入可以实现更复杂的依赖注入情况
laravel的模型层是如何实现事务的?
通过db类的事务方法:transAction 方法实现;
在该方法中可以操作多个模型或数据表,全部成功,则提交事务,有一个失败,就回滚事务;
参考:事物的底层实现
yii框架的生命周期?
1:入口文件,web/index.php
2:入口脚本加载应用配置,并创建一个应用实例
3:应用实例通过请求组件,解析请求的路由
4:应用创建一个控制器去处理请求
5:控制器创建一个操作实例并针对操作执行过滤器
6:如果任何一个过滤器返回失败,则操作退出
7:如果所有过滤器都通过,操作将被执行
8:操作会加载一个数据模型,或许是来自数据库
9:操作会渲染一个视图,把数据模型提供给它
10:渲染结果返回给响应组件
11:响应组件发送渲染结果给用户浏览器
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 表名即可
视图输出:<?php ?>,<?= ?>
yii2和yii的区别
1:yii2中使用了composer
2:事务,增加了begin和commit事务事件,在开始事务和提交事务时触发
3:yii2引入了资源包的概念,通过assets目录下的appasset类
4:数据库使用
查询一条:
1:是user::model()->find(条件)
2:是user::find()->where()->one()
查询多条:
1:是user::model()->findAll()
2:是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的区别?
1:框架架构:laravel采用mvc架构,tpc采用mvc+service+repository架构。laravel在代码组织和架构上更规范化,tp更自由
2:技术特点:laravel使用了一系列先进技术,如:事件,命令行工具,blade模版引擎,orm等,而tp更注重对传统php开发方式的支持,如原生sql和smarty模版引擎
3:文档和社区:laravel的文档和社区活跃度更高
4:学习曲线:laravel学习曲线相对陡峭,需要花费更多时间学习,tp更容易上手,适合初学者
5:使用场景:laravel适合大型、复杂的web应用,如企业级cms,电商网站等;tp适合中小型web应用,如个人博客,小型商城等
tp3.2和tp5的区别:
url和路由的改变:新增(路由分组、闭包定义、路由变量规则、组合变量)
模块和控制器的改变:应用命名空间统一为app而不是模块名,类名不带controller后缀,采用return返回,废除前置和后置方法,url访问自动定位控制器,增加了request和response
数据库改变:查询返回对象,支持链式查询(多个where),支持闭包查询,分块查询,视图查询,增加sql监听事件,废除单字母函数改用db,model
常量和助手函数的改变:废除了一些常量(is_get,is_post等)res
发表评论 取消回复