Laravel是一个基于Symfony的免费开源PHP Web框架。 它由Taylor Otwell创建,允许开发人员编写富有表现力的优雅语法。 Laravel内置了对用户身份验证和授权的支持,这在一些最流行的PHP框架(如CodeIgniter,CakePHP)中缺失。通过阅读下面Laravel面试题和答案,有助于让您在面试过程中应付自如,也可作为测评或复习巩固Laravel知识。
使用enableQueryLog
方法在Laravel中启用查询日志 -
DB::connection()->enableQueryLog();
// 可以使用getQueryLog方法获取已执行查询的数组:
$queries = DB::getQueryLog();
使用Laravel框架的优点
使用laravel框架的缺点
Laravel契约(Contracts) 只不过是一组定义Laravel框架提供的核心服务的接口。
以下是Laravel Eloquent ORM支持的关系类型。
在软件工程中,依赖注入是一种技术,其中一个对象提供另一个对象的依赖关系。 依赖项是可以使用的对象(服务)。 注入是将依赖项传递给将使用它的依赖对象(客户端)。 该服务成为客户所在州的一部分。将服务传递给客户端,而不是允许客户端构建或查找服务,是模式的基本要求。
参考:https://en.wikipedia.org/wiki/Dependency_injection
可以通过Constructor,setter和property injection进行依赖注入。
事件是程序识别的可由程序或代码处理的动作或事件。 Laravel事件提供了一个简单的观察器实现,用于订阅和侦听应用程序中发生的各种事件/操作。 所有事件类通常都存储在app/Events目录中,而其侦听器存储在应用程序的app/Listener中。
要在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);
}
Composer是一个用于管理PHP依赖的工具。 它用于声明项目所依赖的库,并管理(安装/更新)它们。Laravel利用Composer来管理其依赖关系。
迁移是必要的,因为:
Laravel最强大的功能之一是它的服务容器。 它是一个强大的工具,用于解决类依赖关系并在Laravel中执行依赖注入。
依赖注入是一个奇特的短语,本质上意味着类依赖性通过构造函数“注入”类,或者在某些情况下“注入”方法。
在Laravel中,可以使用$request-> ajax()
方法检查请求是否为ajax
。
示例:
public function saveData(Request $request)
{
if($request->ajax()){
return "Request is of Ajax Type";
}
return "Request is of Http type";
}
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
服务提供商是所有laravel应用程序引导的中心位置。 您的应用程序以及所有Laravel核心服务也由服务提供商引导。
所有服务提供商都扩展了IlluminateSupportServiceProvider
类。 大多数服务提供者包含寄存器和引导方法。 在register
方法中,应该只将事物绑定到服务容器中。永远不应尝试在register
方法中注册任何事件侦听器,路由或任何其他功能。
Laravel是基于MVC设计模式的免费开源“PHP框架”。它由Taylor Otwell创建。 Laravel提供富有表现力和优雅的语法,有助于轻松快速地创建出色的Web应用程序。
在编程中,验证是一种方便的方法,可确保数据在进入数据库之前始终处于干净且预期的格式。 Laravel提供了几种不同的方法来验证应用程序传入数据。默认情况下,Laravel的基本控制器类使用ValidatesRequests
特性,它提供了一种方便的方法来验证来自客户端的所有传入HTTP请求。还可以通过创建表单请求来验证laravel中的数据。
以下是Laravel 5.6提供的一些官方/默认包的列表:
Cashier
Envoy
Passport
Scout
Socialite
Horizon
迁移就像数据库的版本控制一样,让开发团队轻松修改和共享应用程序的数据库模式。 迁移通常与Laravel的架构构建器配对,以轻松构建应用程序的数据库架构。
使用以下命令通过 artisan 创建迁移数据。
// creating Migration
$ php artisan make:migration create_users_table
Laravel反向路由根据路由声明生成URL。反向路由使应用程序更加灵活。 它定义了链接和Laravel路由之间的关系。 使用现有路径的名称创建链接时,Laravel会自动创建相应的Uri。 下面是反向路由的一个例子。
// route declaration
Route::get('login', 'users@login');
PHP
使用反向路由,我们可以创建一个链接,并传入定义的任何参数。 如果未提供,可选参数将从生成的链接中删除。
{{ HTML::link_to_action('users@login') }}
PHP
它会在视图中自动生成类似 http://xyz.com/login 的网址。
Laravel中查询构建器提供的一些聚合方法如下所示:
count()
max()
min()
avg()
sum()
可以通过运行以下命令来使用 composer 安装Laravel。
$ composer create-project laravel/laravel your-project-name version
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();
laravel 5.0的一些功能如下所示 -
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
可以通过覆盖Eloquent的受保护$table
属性来在Laravel中使用自定义表。
示例:
class User extends Eloquent{
protected $table="my_user_table";
}
PHP
当然支持。Laravel支持流行的缓存后端,如:Memcached和Redis。
默认情况下,Laravel配置为使用文件缓存驱动程序,该驱动程序将序列化的缓存对象存储在文件系统中。对于大型项目,建议使用Memcached或Redis。
Lumen是基于Laravel顶级组件的PHP微框架。它由Taylor Otwell创建。 它是构建基于Laravel的微服务和快速REST API的完美选择。 它是最快的微框架之一。
可以通过运行以下命令使用composer安装流明 -
$ composer create-project --prefer-dist laravel/lumen blog
在Laravel中,bundle也称为捆绑包。bundle是扩展Laravel功能的主要方式。 包可能是一个很好的方式来处理像Carbon这样的日期,或者像Behat这样的整个BDD测试框架。在Laravel中,也可以创建自定义捆绑包。
要安装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');
Laravel Facades提供静态类似于应用程序服务容器中可用类的接口。 Laravel自行搭载许多Facades,可以看到Laravel的几乎所有特征。 Laravel外观充当服务容器中底层类的“静态代理”,提供简洁,富有表现力的语法,同时比传统的静态类方法保持更多的可测试性和灵活性。 Laravel的所有Facades都在IlluminateSupportFacades
命名空间中定义。可以这样轻松访问Facades:
use Illuminate\Support\Facades\Cache;
Route::get('/cache', function () {
return Cache::get('key');
});
PHP
顾名思义,Middleware充当请求和响应之间的中间人。 它是一种过滤机制。 例如,Laravel包含一个中间件,用于验证应用程序的用户是否经过身份验证。 如果用户通过身份验证,他将被重定向到主页,否则,他将被重定向到登录页面。
Laravel中有两种类型的中间件。