📅  最后修改于: 2021-01-05 11:03:33             🧑  作者: Mango
下面列出了最常见的Laravel面试问题和答案。
Laravel是免费使用的基于PHP的开源Web框架。它是由Taylor Otwell开发的。它支持MVC(模型-视图-控制器)架构模式。 Laravel提供了富有表现力的优雅语法,这对于轻松,快速地创建出色的Web应用程序很有用。 Laravel的第一版于2011年6月9日发布。
在2015年3月的SitePoint调查中,Laravel与Symfony,Nette,CodeIgniter和Yii2一起被选为最受欢迎的PHP框架之一。
Laravel的一些主要功能是:
雄辩的ORM(对象关系映射)是Laravel框架的主要功能之一。它可以定义为活动记录模式的高级PHP实现。
活动记录模式是一种可在软件中找到的体系结构模式。它负责将内存对象数据保存在关系数据库中
在对数据库对象之间的关系实施约束时,雄辩的ORM还负责同时提供内部方法。雄辩的ORM按照活动记录模式将数据库表表示为类,其对象实例绑定到单个表行。
Laravel的Query Builder提供了对Eloquent ORM的更直接的数据库访问。它不需要直接编写SQL查询。相反,它提供了一组可以以编程方式构建查询的类和方法。它还允许对执行的查询的结果进行特定的缓存。
查询生成器提供的一些方法是:
所有Laravel路由均在路由文件中定义,这些文件存储在routes目录中。这些文件由MVC框架加载。 route / web.php文件定义可用于Web界面的路由。这些路由被分配为Web中间件组,该组提供了会话状态和CSRF保护等功能。 route / api.php中可用的路由是无状态的,并分配为API中间件组。对于大多数应用程序,应该首先在route / web.php文件中定义路由。
Laravel中的反向路由用于根据名称或符号生成URL。它定义了链接和Laravel路由之间的关系,并且有可能在以后对路由进行更改以自动传播到相关链接中。当使用现有路由的名称生成链接时,Laravel会自动生成适当的统一资源标识符(URI)。反向路由为应用程序提供了灵活性,并帮助开发人员编写更简洁的代码。
路线声明:
Route::get('login', 'users@login');
可以使用反向路由为其创建链接,该链接可以在我们定义的任何参数中进一步传输。如果未提供可选参数,则会将其从生成的链接中自动删除。
{{ HTML::link_to_action('users@login') }}
通过使用它,将自动创建诸如https://abc.go.com/login的URL。
在Laravel中,捆绑包也称为Packages 。软件包是向Laravel添加更多功能的主要方式。包可以是任何东西,既可以使用类似于Carbon的日期,也可以使用像Behat这样的整个BDD测试框架。 Laravel还支持创建自定义软件包。
有不同类型的软件包。其中一些是独立软件包。这意味着他们可以使用任何PHP框架。 Carbon和Behat等框架是独立软件包的示例。其他软件包旨在与Laravel一起使用。这些软件包可能包含主要用于增强Laravel应用程序的路由,控制器,视图和配置。
编写器是PHP中的依赖项管理器。它管理项目所需的依赖关系。这意味着作曲家将在一个地方提取所有必要的库,依赖项并进行全部管理。
Laravel安装步骤:
是的,Laravel为流行的缓存后端(如Memcached和Redis)提供了支持。
默认情况下,Laravel配置为使用文件缓存驱动程序,该驱动程序用于在文件系统中存储序列化或缓存的对象。对于大型项目,建议使用Memcached或Redis。
在Laravel中清除缓存的语法如下:
顾名思义,中间件充当请求和响应之间的中间人。中间件是HTTP请求过滤机制的一种形式。例如,Laravel由中间件组成,该中间件验证应用程序的用户是否已通过身份验证。如果用户已通过身份验证并尝试访问仪表板,则中间件会将其重定向到主页;否则,用户将被重定向到登录页面。
Laravel提供了两种类型的中间件:
全球中间件
它将在应用程序的每个HTTP请求上运行。
路由中间件
它将分配给特定的路线。
句法
php artisan make:middlewareMiddelwareName
例
php artisan make:middlewareUserMiddleware
现在,将在app / Http / Middleware中创建UserMiddleware.php文件。
迁移可以定义为数据库的版本控制,这使我们能够轻松地修改和共享应用程序的数据库架构。迁移通常与Laravel的架构生成器搭配使用,以轻松构建应用程序的数据库架构。
迁移文件包括两种方法, up()和down() 。 up()方法用于添加新表,列或索引数据库,down()方法用于逆转up()方法执行的操作。
我们可以使用make:migration生成一个迁移及其文件。
句法
php artisan make:migration blog
通过使用它,将在数据库/迁移中创建当前日期的blog.php文件。
可以将服务提供商定义为配置所有整个Laravel应用程序的中心位置。应用程序以及Laravel的核心服务通过服务提供商进行引导。这些是用于维护类依赖关系和执行依赖关系注入的强大工具。服务提供商还指示Laravel将各种组件绑定到Laravel的服务容器中。
此处给出了一个artisan命令,可用于生成服务提供者:
php artisan make: provider ClientsServiceProvider
几乎所有服务提供商都扩展了Illuminate \ Support \ ServiceProvider类。大多数服务提供商的文件中都包含以下功能:
在Register()方法中,只能将内容绑定到服务容器中。永远不要尝试在Register()方法中注册任何事件侦听器,路由或任何其他功能。
我们可以使用whereBetween()方法通过Query检索两个日期之间的数据。
例
Blog::whereBetween('created_at', [$date1, $date2])->get();
CSRF保护代表“跨站点请求伪造”保护。 CSRF会检测到未经授权的用户对Web应用程序的未经授权的攻击。内置的CSRF插件用于创建CSRF令牌,以便它可以验证活动的经过身份验证的用户发送的所有操作和请求。
要关闭特定路由的CSRF保护,我们可以在$ appapp \ Http \ Middleware \ VerifyCsrfToken.php文件中存在的$ except变量中添加该特定URL或Route。
例
classVerifyCsrfToken extends BaseVerifier
{
protected $except = [
'Pass here your URL',
];
}
Laravel提供了一些官方软件包,如下所示:
出纳员
Laravel收银员为Stripe和Braintree的订阅计费服务实现了一个表达流畅的界面。它控制着您正在编写的几乎所有样板订阅帐单代码。此外,出纳员还可以控制息票,订购数量,交换订购,取消宽限期,甚至生成发票PDF。
使者
Laravel Envoy负责提供一种简洁的最小语法,用于定义我们在远程服务器上运行的常见任务。使用Blade样式语法,可以快速安排部署任务,Artisan命令等。 Envoy仅提供对Mac和Linux的支持。
护照
Laravel用于创建API身份验证,以在Laravel护照的帮助下轻松实现。它在几分钟之内为Laravel应用程序提供了完整的Oauth2服务器实现。护照通常组装在由Alex Bilbie维护的League OAuth2服务器之上。
侦察
Laravel Scout用于提供一个简单的基于驱动程序的解决方案,以将全文本搜索添加到雄辩的模型中。通过使用模型观察器,Scout可以自动使搜索索引与雄辩的记录保持同步。
社交名流
Laravel Socialite用于为Facebook,Twitter,Google和Linkedln等提供OAuth认证的表达,流畅的界面。它控制着您正在编写的几乎所有样板化社交认证代码。
单元测试是Laravel的组成部分提供的内置测试。它由检测和防止框架回归的单元测试组成。可以通过可用的artisan命令行实用程序运行单元测试。
Laravel Facades提供了类静态的接口类,这些类在应用程序的服务容器中可用。 Laravel自带多个外观的自船,可以使用Laravel的几乎所有功能。外墙还有助于直接从容器本身访问服务。它在Illuminate \ Support \ Facades命名空间中进行了描述。因此,它易于使用。
例
use Illuminate\Support\Facades\Cache;
Route::get('/cache', function () {
return Cache::get('PutkeyNameHere');
})
使用artisan命令的-version选项,可以轻松检查Laravel安装的当前版本。
Php artisan -version
dd代表“ Dump and Die” 。 Laravel的dd()函数可以定义为辅助函数,该函数用于将变量的内容转储到浏览器并阻止进一步的脚本执行。
例
dd($array);
PHP artisan是Laravel提供的命令行界面/工具。它由几个有用的命令组成,这些命令在构建应用程序时可能会有所帮助。下面给出了一些手工艺命令:
PHP工匠名单
“列表”命令用于查看所有可用Artisan命令的列表。
PHP工匠帮助
每个命令还包含一个“帮助”屏幕,该屏幕用于显示和描述命令的可用参数和选项。要显示帮助屏幕,请运行“帮助”命令。
PHP工匠修补匠
Laravel的手工艺匠是repl(读-评估-打印循环)。使用修补程序,可以通过命令行编写实际的PHP代码。甚至可以更新或删除数据库中的表记录。
PHP artisan-版本
通过使用此命令,可以查看Laravel安装的当前版本。
PHP工匠制作模型model_name
该命令在“ app”目录下创建一个模型“ model_name.php”。
PHP工匠制作控制器controller_name
此命令用于在app / Http / Controllers文件夹中构建新的控制器文件。
事件是程序识别和处理的活动或事件。 Laravel中的事件提供了简单的观察者实现,使我们能够在应用程序中订阅和侦听事件。事件类存储在应用程序/事件中,而其侦听器存储在我们应用程序的应用程序/侦听器中。这些可以使用Artisan控制台命令生成。单个事件可能包含多个彼此不依赖的侦听器。
Laravel中有一些事件示例:
验证是Laravel用于验证应用程序中的传入数据的方法。
它们是在将数据输入数据库之前确保其为干净且预期格式的便捷方法。 Laravel包含几种不同的方法来验证应用程序的传入数据。默认情况下,Laravel的基本控制器类使用ValidatesRequests特性在强大的验证规则的帮助下验证所有传入的HTTP请求。
Lumen是一个基于Laravel顶级组件的PHP微框架。它由泰勒·奥特威尔(Taylor Otwell)(Laravel的创建者)创建。它是为构建基于Laravel的微服务和快速开发API而创建的。它是现有最快的微框架之一。 Lumen不是像Laravel这样的完整Web框架,仅用于创建API。因此,大多数组件(例如HTTP会话,cookie和模板)都从Lumen中排除。 Lumen为诸如日志记录,路由,缓存队列,验证,错误处理,中间件,依赖项注入,控制器,刀片模板,命令调度程序,数据库抽象,服务容器和Eloquent ORM等功能提供支持。
可以通过运行以下命令使用composer安装Lumen:
composer create-project --prefer-distlaravel/lumen blog
刀片是Laravel提供的简单但功能强大的模板引擎。在视图中使用PHP代码没有限制。所有刀片视图都被编译成简单的PHP代码并被缓存,直到对其进行修改。 Blade有效地为我们的应用程序增加了零开销。 Laravel中的刀片视图文件使用.blade.phpfile扩展名,并保存在resources / views目录中。
Laravel中的服务容器是最强大的功能之一。它是解决类依赖关系并在Laravel中执行依赖关系注入的重要而强大的工具。也称为IoC容器。
依赖项注入是一个术语,从本质上讲是指构造函数或某些情况下是“ setter”方法将类依赖关系“注入”到类中。
服务容器的优势
Laravel的合同是一组接口,负责定义Laravel框架提供的服务的核心功能。
Homestead是一个官方的,预先打包的,无所事事的虚拟机,它为Laravel开发人员提供了开箱即用地开发Laravel的所有必要工具。它还包括Ubuntu,Gulp,Bower和其他开发工具,这些工具可用于开发全面的Web应用程序。它提供了一个开发环境,无需在机器上安装PHP,Web服务器或任何其他服务器软件即可使用。
Laravel | Codeigniter |
---|---|
Laravel is a framework with an expressive, elegant syntax. | Codeigniter is a powerful framework based on PHP. |
Laravel is built for the latest version of PHP. | Codeigniter is an older, more mature framework. |
Laravel is more object-oriented as compared to Codeigniter. | Codeigniter is less object-oriented as compared to Laravel. |
Laravel can produce model-view-controller, active-record, observer, dependency injection, singleton, restful, façade, event-driven, MTV, and HMVC design patterns. | Codeigniter can produce active-record, model-view-controller, and HMVC design patterns. |
Laravel supports ORM. | Codeigniter does not support ORM |
Laravel needs 1 GB memory. | Codeigniter needs 256 GB memory. |
Laravel has built-in user authentication support. | Codeigniter does not have in-built user authentication support. |
我们可以使用以下方式获取用户的IP地址:
public function getUserIp(Request $request){
// Gettingip address of remote user
return $user_ip_address=$request->ip();
}
通过覆盖Eloquent的受保护的$ table属性,我们可以轻松地在Laravel中使用自定义表。这里是示例:
class User extends Eloquent{
protected $table="my_user_table";
}
cursor方法允许我们使用游标遍历数据库,该游标将仅执行单个查询。在处理大量数据时,可以使用游标方法来大大减少内存使用量。
例
foreach (Product::where('name', 'bar')->cursor() as $flight) {
//make some stuff
}
我们可以按照以下步骤使用composer创建一个帮助文件:
在app文件夹中创建一个文件“ app / helpers.php”。
加
"files": [
"app/helpers.php"
]
在“自动加载”变量中。
现在使用composer dump-autoload或composer update更新composer.json。
控制器保存在app / http / Controllers目录中。
PHP紧凑函数接收每个键,然后尝试搜索具有相同名称的变量。如果找到一个变量,那么它将构建一个关联数组。
Laravel 4和Laravel 5.x之间的主要区别如下:
Laravel与其他PHP框架相比没有什么好处:
以下是Laravel Eloquent ORM支持的关系类型:
ORM代表对象关系映射。它是一种编程技术,用于在面向对象的编程语言中的不兼容类型系统之间转换数据。
我们可以通过以下方式在Laravel中实现一个包:
PHP特性是一组可以包含在另一个类中的方法。特性不能像抽象类一样被自身实例化。生成特性以减少PHP中单一继承的限制。它允许开发人员在生活在不同类层次结构中的各个独立类中自由地重用方法集。
例
trait Sharable {
public function share($item)
{
return 'share this item';
}
}
然后,我们可以将此特性包括在其他类中,例如:
class Post {
use Sharable;
}
class Comment {
use Sharable;
}
现在,如果我们想从这些类中创建新对象,我们会发现它们都有可用的share()方法:
$post = new Post;
echo $post->share(''); // 'share this item'
$comment = new Comment;
echo $comment->share(''); // 'share this item'
Laravel默认配置为使用MySQL。
要更改其默认数据库类型,请编辑文件config / database.php :
通过使用它,MySQL更改为SQLite。
当应用程序处于维护模式时,将为进入该应用程序的所有请求显示自定义视图。它使在更新或执行维护时轻松“禁用”应用程序变得容易。在我们应用程序的默认中间件堆栈中添加了维护模式检查。当应用程序处于维护模式时,将抛出StatusMode为503的MaintenanceModeException。
我们只需执行以下命令即可在Laravel 5中启用或禁用维护模式:
// Enable maintenance mode
php artisan down
// Disable maintenance mode
php artisan up
如果要使用Laravel雄辩的话在数据库中创建新记录,则需要创建一个新的模型实例。然后,我们需要在模型上设置属性并调用save()方法。
例
public functionsaveProduct(Request $request )
$product = new product;
$product->name = $request->name;
$product->description = $request->name;
$product->save();
User()函数用于获取登录用户
例
if(Auth::check()){
$loggedIn_user=Auth::User();
dd($loggedIn_user);
}
在雄辩的ORM中,$ fillable属性是一个数组,其中包含可以使用mass-assignment填充的所有表字段。
质量分配是指向模型发送数组以直接在数据库中创建新记录。
代码源
class User extends Model {
protected $fillable = ['name', 'email', 'mobile'];
// All fields inside $fillable array can be mass-assigned
}
保护属性与可填充属性相反。
在Laravel中,可填充属性用于指定要大量分配的那些字段。受保护的属性用于指定不可大量分配的那些字段。
代码源
class User extends Model {
protected $guarded = ['role'];
// All fields inside the $guarded array are not mass-assignable
}
如果要阻止所有字段被批量分配,则可以使用:
protected $guarded = ['*'];
$ fillable充当“白名单”,而$ guarded功能充当“黑名单”。一个人应该使用$ fillable或$ guarded。
在Laravel中,Closure是一种匿名方法,可以用作回调函数。它也可以用作函数的参数。可以将参数传递给Closure。可以通过更改handle()方法中的Closure函数调用来为其提供参数来完成此操作。闭包可以访问变量范围之外的变量。
例
function handle(Closure $closure) {
$closure();
}
handle(function(){
echo 'Interview Question';
});
首先将一个Closure参数添加到handle()方法开始。我们可以调用handle()方法并将服务作为参数传递。
通过使用$ closure() ;在handle()方法中,我们告诉Laravel执行给定的Closure,然后显示“面试问题”。