Laravel面试题及答案

Laravel是一个基于Symfony的免费开源PHP Web框架。 它由Taylor Otwell创建,允许开发人员编写富有表现力的优雅语法。 Laravel内置了对用户身份验证和授权的支持,这在一些最流行的PHP框架(如CodeIgniter,CakePHP)中缺失。通过阅读下面Laravel面试题和答案,有助于让您在面试过程中应付自如,也可作为测评或复习巩固Laravel知识。

1. 如何在Laravel中启用查询日志?

使用enableQueryLog方法在Laravel中启用查询日志 -

DB::connection()->enableQueryLog(); 

// 可以使用getQueryLog方法获取已执行查询的数组:
$queries = DB::getQueryLog();

2. 使用Laravel框架有哪些优缺点?

使用Laravel框架的优点

  • Laravel框架具有内置的轻量级刀片模板引擎,可加快编译任务并轻松创建具有动态内容的布局。
  • 提高代码可重用性。
  • Eloquent ORM与PHP活动记录实现。
  • 内置命令行工具“Artisan”,用于创建代码框架,数据库结构并构建其迁移。

使用laravel框架的缺点

  • 开发过程要求您使用标准,并且应该对编程有真正的了解
  • Laravel是新的框架,与npm(对于node.js),ruby gems和python pip相比,Laravel并不是那么强大。
  • 与ruby on rails相比,laravel的开发速度并不快。
  • Laravel是轻量级的,因此与django和rails相比,它具有较少的内置支持。 但是这个问题可以通过集成第三方工具来解决,但对于大型和非常自定义的网站来说,这可能是一项单调乏味的任务。

3. Laravel契约(Contracts) 是什么?

Laravel契约(Contracts) 只不过是一组定义Laravel框架提供的核心服务的接口。

4. Laravel Eloquent中可用的关系类型有哪些?

以下是Laravel Eloquent ORM支持的关系类型。

  • 一对一
  • 一对多
  • 一对多(逆)
  • 多对多
  • 有多通过(Has Many Through)
  • 多态关系
  • 多对多的多态关系

5. Laravel中的依赖注入是什么?

在软件工程中,依赖注入是一种技术,其中一个对象提供另一个对象的依赖关系。 依赖项是可以使用的对象(服务)。 注入是将依赖项传递给将使用它的依赖对象(客户端)。 该服务成为客户所在州的一部分。将服务传递给客户端,而不是允许客户端构建或查找服务,是模式的基本要求。

参考:https://en.wikipedia.org/wiki/Dependency_injection

可以通过Constructor,setter和property injection进行依赖注入。

6. laravel中的事件是什么?

事件是程序识别的可由程序或代码处理的动作或事件。 Laravel事件提供了一个简单的观察器实现,用于订阅和侦听应用程序中发生的各种事件/操作。 所有事件类通常都存储在app/Events目录中,而其侦听器存储在应用程序的app/Listener中。

7. 如何关闭Laravel中特定路由的CSRF保护?

要在Laravel中关闭CSRF保护,请在文件:app/Http/Middleware/VerifyCsrfToken.php 中添加以下代码 -

//add an array of Routes to skip CSRF check
private $exceptUrls = ['controller/route1', 'controller/route2'];
 //modify this function
public function handle($request, Closure $next) {
 //add this condition foreach($this->exceptUrls as $route) {
 if ($request->is($route)) {
  return $next($request);
 }
}
return parent::handle($request, $next);
}

8. PHP中的 Composer 是什么? 

Composer是一个用于管理PHP依赖的工具。 它用于声明项目所依赖的库,并管理(安装/更新)它们。Laravel利用Composer来管理其依赖关系。

9. 为什么需要迁移?

迁移是必要的,因为:

  • 如果没有迁移,共享应用程序时的数据库一致性几乎是不可能的,尤其是随着越来越多的人在Web应用程序上进行协作。
  • 生产数据库也需要同步。

10. 请解释Laravel的服务容器是什么?

Laravel最强大的功能之一是它的服务容器。 它是一个强大的工具,用于解决类依赖关系并在Laravel中执行依赖注入。
依赖注入是一个奇特的短语,本质上意味着类依赖性通过构造函数“注入”类,或者在某些情况下“注入”方法。

11. 如何检查请求为ajax请求?

在Laravel中,可以使用$request-> ajax()方法检查请求是否为ajax

示例:

public function saveData(Request $request)
{
    if($request->ajax()){
        return "Request is of Ajax Type";
    }
    return "Request is of Http type";
}

12. Laravel的Traits是什么?

PHP Traits只是一组想要包含在另一个类中的方法。Trait就像抽象类一样,不能自己实例化。通过使开发人员能够在生活在不同类层次结构中的几个独立类中自由地重用方法集,创建了Trait以减少PHP中单一继承的限制。

下面是Traits的一个例子。

trait Sharable {

  public function share($item)
  {
    return 'share this item';
  }

}

PHP

然后,可以将此Trait包含在其他类中,如下所示:

class Post {

  use Sharable;

}

class Comment {

  use Sharable;

}

PHP

现在,如果要从这些类中创建新对象,会发现它们都有share()方法可用:

$post = new Post;
echo $post->share(''); // 'share this item' 

$comment = new Comment;
echo $comment->share(''); // 'share this item'\n

13. 什么是服务提供商/提供者?

服务提供商是所有laravel应用程序引导的中心位置。 您的应用程序以及所有Laravel核心服务也由服务提供商引导。
所有服务提供商都扩展了IlluminateSupportServiceProvider类。 大多数服务提供者包含寄存器和引导方法。 在register方法中,应该只将事物绑定到服务容器中。永远不应尝试在register方法中注册任何事件侦听器,路由或任何其他功能。

14. 什么是Laravel?


Laravel是基于MVC设计模式的免费开源“PHP框架”。它由Taylor Otwell创建。 Laravel提供富有表现力和优雅的语法,有助于轻松快速地创建出色的Web应用程序。

 

15. 请解释laravel中的验证?

在编程中,验证是一种方便的方法,可确保数据在进入数据库之前始终处于干净且预期的格式。 Laravel提供了几种不同的方法来验证应用程序传入数据。默认情况下,Laravel的基本控制器类使用ValidatesRequests特性,它提供了一种方便的方法来验证来自客户端的所有传入HTTP请求。还可以通过创建表单请求来验证laravel中的数据。

16. 请列出Laravel 5.6提供的一些默认包?


以下是Laravel 5.6提供的一些官方/默认包的列表:

Cashier
Envoy
Passport
Scout
Socialite
Horizon

17. 什么是数据库迁移?如何通过 artisan 创建迁移?

迁移就像数据库的版本控制一样,让开发团队轻松修改和共享应用程序的数据库模式。 迁移通常与Laravel的架构构建器配对,以轻松构建应用程序的数据库架构。

使用以下命令通过 artisan 创建迁移数据。

// creating Migration
$ php artisan make:migration create_users_table

18. Laravel中的反向路由是什么?

Laravel反向路由根据路由声明生成URL。反向路由使应用程序更加灵活。 它定义了链接和Laravel路由之间的关系。 使用现有路径的名称创建链接时,Laravel会自动创建相应的Uri。 下面是反向路由的一个例子。

// route declaration
Route::get('login', 'users@login');

PHP

使用反向路由,我们可以创建一个链接,并传入定义的任何参数。 如果未提供,可选参数将从生成的链接中删除。

{{ HTML::link_to_action('users@login') }}

PHP

它会在视图中自动生成类似 http://xyz.com/login 的网址。

19. 列出Laravel中查询构建器提供的一些聚合方法?


Laravel中查询构建器提供的一些聚合方法如下所示:

count()
max()
min()
avg()
sum()

20. 如何通过 composer 来安装laravel?

可以通过运行以下命令来使用 composer 安装Laravel。

$ composer create-project laravel/laravel your-project-name version

 

21. Laravel的 eloquent是什么?

 

Laravel的Eloquent ORM是用于处理数据库的简单Active Record实现。 Laravel提供了许多与数据库交互的不同方式,Eloquent最引人注目。 每个数据库表都有一个相应的“模型”,用于与该表进行交互。 模型可用于查询表中的数据,以及在表中插入新记录。

下面是使用 Eloquent 在Database中查询和插入新记录的示例用法。

// Querying or finding records from products table where tag is 'new'\n$products= Product::where('tag','new');
// Inserting new record 
 $product =new Product;
 $product->title="Iphone 7";
 $product->price="$700";
 $product->tag='iphone';
 $product->save();

22. 请列出laravel 5.0的一些功能?

laravel 5.0的一些功能如下所示 -

  • 内置CSRF(跨站点请求伪造)保护。
  • 内置分页
  • 反向路由
  • 查询构建器
  • 路由缓存
  • 数据库迁移
  • IOC(控制反转)容器或服务容器。

 

23. 什么是PHP artisan?请列出 artisan 的一些命令?

PHP artisan是Laravel附带的命令行界面/工具。 它提供了许多有用的命令,可以帮助您轻松构建应用程序。 以下是一些 artisan 命令列表: -

  • php artisan list
  • php artisan help
  • php artisan tinker
  • php artisan make
  • php artisan –versian
  • php artisan make model model_name
  • php artisan make controller controller_name

24. 如何在Laravel Modal中使用自定义表?

可以通过覆盖Eloquent的受保护$table属性来在Laravel中使用自定义表。

示例:

class User extends Eloquent{
 protected $table="my_user_table";

}

PHP

 

25. Laravel是否支持缓存?

当然支持。Laravel支持流行的缓存后端,如:Memcached和Redis。
默认情况下,Laravel配置为使用文件缓存驱动程序,该驱动程序将序列化的缓存对象存储在文件系统中。对于大型项目,建议使用Memcached或Redis。

26. Lumen是什么?

 

Lumen是基于Laravel顶级组件的PHP微框架。它由Taylor Otwell创建。 它是构建基于Laravel的微服务和快速REST API的完美选择。 它是最快的微框架之一。
可以通过运行以下命令使用composer安装流明 -

$ composer create-project --prefer-dist laravel/lumen blog

27. 请解释Laravel中的捆绑包?

在Laravel中,bundle也称为捆绑包。bundle是扩展Laravel功能的主要方式。 包可能是一个很好的方式来处理像Carbon这样的日期,或者像Behat这样的整个BDD测试框架。在Laravel中,也可以创建自定义捆绑包。

28. 安装Laravel框架的服务器系统环境有什么要求?

要安装Laravel,请确保您的服务器满足以下要求:

  • PHP> = 7.1.3
  • OpenSSL PHP扩展
  • PDO PHP扩展
  • Mbstring PHP扩展
  • Tokenizer PHP扩展
  • XML PHP扩展
  • Ctype PHP扩展
  • JSON PHP扩展

29. Laravel框架中的命名路由是什么?

命名路由是Laravel框架的另一个惊人功能。 命名路由允许在生成重定向或Urls时更方便地引用路由。可以通过将name方法链接到路由定义来指定命名路由:

Route::get('user/profile', function () {
    //
})->name('profile');

PHP

可以为控制器操作指定路由名称:

Route::get('user/profile', 'UserController@showProfile')->name('profile');

PHP

为路径指定名称后,可以在生成URL时使用路径名称,或通过全局路径功能重定向:

// Generating URLs...
$url = route('profile');
// Generating Redirects...
return redirect()->route('profile');

30. 请解释一下Laravel中的Facades是什么?

Laravel Facades提供静态类似于应用程序服务容器中可用类的接口。 Laravel自行搭载许多Facades,可以看到Laravel的几乎所有特征。 Laravel外观充当服务容器中底层类的“静态代理”,提供简洁,富有表现力的语法,同时比传统的静态类方法保持更多的可测试性和灵活性。 Laravel的所有Facades都在IlluminateSupportFacades命名空间中定义。可以这样轻松访问Facades:

use Illuminate\Support\Facades\Cache;

Route::get('/cache', function () {
    return Cache::get('key');
});

PHP

 

31. Laravel的中间件(Middleware)是什么?
 

顾名思义,Middleware充当请求和响应之间的中间人。 它是一种过滤机制。 例如,Laravel包含一个中间件,用于验证应用程序的用户是否经过身份验证。 如果用户通过身份验证,他将被重定向到主页,否则,他将被重定向到登录页面。

Laravel中有两种类型的中间件。

  • 全局中间件:将在应用程序的每个HTTP请求上运行。
  • 路由中间件:将被分配到特定路由。

你可能感兴趣的:(面试问题归纳)