① laravel 控制器在哪个文件夹
根目录/app/http/Controllers
laravel目录结构:
注:写本文时参照的是5.1.4版本
目录或文件 说明
|–app 包含Controller、Model、路由等在内的应用目录,大部分业务将在该目录下进行
||–Console 命令行程序目录
|||–Commands 包含了用于命令行执行的类,可在该目录下自定义类
|||–Kernel.php 命令调用内核文件,包含commands变量(命令清单,自定义的命令需加入到这里)和schele方法(用于任务调度,即定时任务)
||–Events 事件目录
||–Exceptions 包含了自定义错误和异常处理类
||–Http HTTP传输层相关的类目录
|||–Controllers 控制器目录
|||–Kernel.php 包含http中间件和路由中间件的内核文件
|||–Middleware 中间件目录
|||–Requests 请求类目录
|||–routes.php 强大的路由
||–Jobs 该目录下包含队列的任务类
||–Listeners 监听器目录
||–Providers 服务提供者目录
||–User.php 自带的模型实例,我们新建的Model默认也存储在该目录
|–artisan 强大的命令行接口,你可以在app/Console/Commands下编写自定义命令
|–bootstrap 框架启动载入目录
||–app.php 创建框架应用实例
||–autoload.php 自动加载
||–cache 存放框架启动缓存,web服务器需要有该目录的写入权限
|–composer.json 存放依赖关系的文件
|–composer.lock 锁文件,存放安装时依赖包的真实版本
|–config 各种配置文件的目录
||–app.php 系统级配置文件
||–auth.php 用户身份认证配置文件,指定好table和model就可以很方便地用身份认证功能了
||–broadcasting.php 事件广播配置文件
||–cache.php 缓存配置文件
||–compile.php 编译额外文件和类需要的配置文件,一般用户很少用到
||–database.php 数据库配置文件
||–filesystems.php 文件系统配置文件,这里可以配置云存储参数
||–mail.php 电子邮件配置文件
||–queue.php 消息队列配置文件
||–services.php 可存放第三方服务的配置信息
||–session.php 配置session的存储方式、生命周期等信息
||–view.php 模板文件配置文件,包含模板目录和编译目录等
|–database 数据库相关目录
||–factories 5.1版本的新特性,工厂类目录,也是用于数据填充
|||–ModelFactory.php 在该文件可定义不同Model所需填充的数据类型
||–migrations 存储数据库迁移文件
||–seeds 存放数据填充类的目录
||–DatabaseSeeder.php 执行php artisan db:seed命令将会调用该类的run方法。该方法可调用执行该目录下其他Seeder类,也可调用factories方法生成ModelFactory里定义的数据模型
|–.env 环境配置文件。config目录下的配置文件会使用该文件里面的参数,不同生产环境使用不同的.env文件即可。
|–gulpfile.js gulp(一种前端构建工具)配置文件
|–package.json gulp配置文件
|–phpspec.yml phpspec(一种PHP测试框架)配置文件
|–phpunit.xml phpunit(一种PHP测试框架)配置文件
|–public 网站入口,应当将ip或域名指向该目录而不是根目录。可供外部访问的css、js和图片等资源皆放置于此
||–index.php 入口文件
||–.htaccess Apache服务器用该文件重写URL
||–web.config IIS服务器用该文件重写URL
|–resources 资源文件目录
||–assets 可存放包含LESS、SASS、CoffeeScript在内的原始资源文件
||–lang 本地化文件目录
||–views 视图文件就放在这啦
|–server.php PHP内置的Web服务器将把这个文件作为入口。以public/index.php为入口的可以忽略掉该文件
|–storage 存储目录。web服务器需要有该目录及所有子目录的写入权限
||–app 可用于存储应用程序所需的一些文件?待补充
||–framework 该目录下包括缓存、sessions和编译后的视图文件
||–logs 日志目录
|–tests 测试目录
|–vendor 该目录下包含Laravel源代码和第三方依赖包
② 如何用phpunit做接口测试平台
phpunit的文档中Chapter 3. Installing PHPUnit这一章节,先看下看头部分的Note,确定环境没问题,再到本章节的Optional packages,部分,下载DbUnit、PHP_Invoker、PHPUnit_Selenium、
PHPUnit_Story、PHPUnit_SkeletonGenerator等可选包,应该就可以解决require_once包含一些文件发生找不到文件的错误,你可以执行ls /usr/share/pear/PHPUnit/命令查询有那些目录,我的有
Autoload.php Extensions Framework Runner TextUI Util。
另外在Yii框架中使用phpunit发现当我执行phpunit unit/BBCodeTest.php命令时,能正常执行,而执行phpunit webTest/protected/tests/unit/BBCodeTest.php 命令时报错!提示找不到CTestCase类,这是Yii框架自带的类,在/var/www/html/yii-1.1.13.e9e4a0/framework/test/路径里,webTest与yii-1.1.13.e9e4a0是在同一目录下!当我执行phpunit BBCodeTest.php时,也报错,同样是找不到
CTestCase,难道测试文件里包含了其他类phpunit命令必须在测试文件的上一个目录执行!!最后发现原来是这个东东的问题
③ 为什么 Laravel 会成为最成功最流行的 PHP 框架
Laravel是一个有着美好前景的年轻框架,它的社区充满着活力,同时提供了完整而清晰的文档,而且为快速、安全地开发现代应用提供了必要的功能。
2011年,Taylor Otwell首次将Laravel带给这个世界,彼时,Laravel就是一个全新且现代的框架。Laravel基于MVC架构,可以满足诸如事件处理、用户身份验证等各种需求,同时通过包管理实现模块化和可扩展的代码,并且对数据库管理有着健壮的支持。
不管是专家还是新手,一旦接触到Laravel,都会有相见恨晚之感——这正是你在为PHP项目寻找的框架。本文我们将讨论为什么Laravel会成为最成功最流行的PHP框架。
模块化&可扩展性
Laravel是模块化和可扩展的,你可以在包含超过5500个程序包的Packalyst中找到你想要添加的任何代码。
微服务&API
Lumen是一个由Laravel衍生的专注于性能的微框架。使用Lumen提供的高性能API你可以更加简单快速地开发微型项目。Lumen使用最小的配置集成了Laravel的所有重要特性,你可以通过将代码复制到Laravel项目来实现框架的完整迁移。
<?php
$app->get('/', function() {
return view('lumen');
});
$app->post('framework/{id}', function($framework) {
$this->dispatch(new Energy($framework));
});
HTTP路由
Laravel拥有类似于Ruby on Rails的快速高效的路由系统。它可以让用户通过在浏览器上输入路径的方式让应用程序的各部分相关联。
Route::get('/', function () {
return 'Hello World';
});
HTTP中间件
Route::get('/', function () {
return 'Hello World';
});
Laravel可以通过中间件对应用进行保护——中间件会处理分析和过滤到达服务器的HTTP请求。你可以使用中间件来验证注册用户、避免跨站脚本攻击(XSS)以及其它安全问题。
<?php
namespace App\Http\Middleware;
use Closure;
class OldMiddleware {
public function handle($request, Closure $next) {
if ($request->input('age') <= 200) {
return redirect('home');
}
return $next($request);
}
}
缓存
Laravel提供了健壮的缓存系统,使用缓存可以让应用加载地更加快速,从而带来更好的用户体验。
Cache::extend('mongo', function($app) {
return Cache::repository(new MongoStore);
});
身份验证
安全是至关重要的。Laravel自带对本地用户的身份验证,并可以使用“remember” 选项来记住用户。此外你还可以引入一些额外参数,例如是否是活跃用户。
if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1 ], $remember)) {
// The user is being remembered...
}
集成Stripe
Laravel Cashier可以满足你开发支付系统过程中所需要的任何需求。除此之外,它还同步并集成了用户身份验证系统。所以,你不再需要担心如何将计费系统集成到开发中了。
$user = User::find(1);
$user->subscription('monthly')->create($creditCardToken);
任务自动化
Elixir是一个让我们可以使用Gulp定义任务的Laravel API,我们可以使用Elixir定义预处理器来压缩CSS 和JavaScript。
elixir(function(mix) {
mix.browserify('main.js');
});
加密
一个安全的应用应该做到可以对数据进行加密。在Laravel中,可以使用OpenSSL和AES-256-CBC加密算法来满足你所有的加密需求。此外,所有的加密值都通过认证码进行签名以避免加密信息被篡改。
use Illuminate\Contracts\Encryption\DecryptException;
try {
$decrypted = Crypt::decrypt($encryptedValue);
} catch (DecryptException $e) {
//
}
事件处理
Laravel应用中对事件的定义、记录和监听都非常便捷。服务提供者EventServiceProvider中的listen属性包含了应用中的所有事件列表。
protected $listen = [
'App\Events\PodcastWasPurchased' => [
'App\Listeners\EmailPurchaseConfirmation',
],
];
分页
在Laravel中分页非常简单,因为它能够根据用户在浏览器中的当前页生成一系列分页链接。
<?php
namespace App\Http\Controllers;
use DB;
use App\Http\Controllers\Controller;
class UserController extends Controller {
public function index() {
$users = DB::table('users')->paginate(15);
return view('user.index', ['users' => $users]);
}
}
对象关系映射(ORM)
Laravel包含了一个数据库处理层,其中的对象关系映射被称作Eloquent。另外这个对象关系映射也适用于PostgreSQL。
$users = User::where('votes', '>', 100)->take(10)->get();
foreach ($users as $user) {
var_mp($user->name);
}
单元测试
单元测试的开发是一个耗费大量时间的任务,但是它却保证了我们的应用能够正常工作,不出问题。Laravel使用PHPUnit进行单元测试。
<?php
use Illuminate\Foundation\Testing\WithoutMiddleware;
use Illuminate\Foundation\Testing\DatabaseTransactions;
class ExampleTest extends TestCase {
public function testBasicExample() {
$this->visit('/')->see('Laravel 5')->dontSee('Rails');
}
}
待办事项清单(Queue)
Laravel提供了在后台使用待办事项清单(to do list)处理复杂、漫长流程的选择,好吧,其实就是队列,队列可以让我们异步处理某些流程而不需要用户在加载页面时长时间的等待。
Queue::push ( new SendEmail ( $ message ));
④ PHP中使用Guzzle进行API测试
本文将介绍 Guzzle , Guzzle 在单元测试中的使用。
来自 Guzzle 中文文档的解释:
使用 composer 安装
或者编辑项目的 composer.json 文件,添加Guzzle作为依赖
执行 composer update
或使用 query 请求参数来声明查询字符串参数:
传入 form_params 数组参数
同Guzzle的安装, 也适用Composer工具。
或者在composer.json文件中声明对phpunit/phpunit的依赖
执行安装
我们在 tests\unit\MyApiTest.php 中定义了两个测试用例
在项目根目录执行命令
通过 Guzzle 强大的功能,可以方便进行API单元测试。大家可以查看 Guzzle 文档,详细了解 Guzzle 的使用。
⑤ PHP到底有多糟糕
php是web开发第一语言,这已经是坐稳了的事实,因为使用简单,工具完善,开发效率高等优点为它积聚了大量的粉丝,号称世界上最好的语言。 然而,就算是世界上最好的语言也有缺陷,下面我挑几个php语法层面不那么好用的特性吐槽下。
变量面前的美元($)符号
我想不明白当初php语言的设计师是怎么想的,为什么非要在变量名面前加上这个美元符号?每次我书写变量时必须要按一下shift +4键,用其它语言可以很流畅的写代码,在php中却老是被按这个shift打断整个过程,这除了能给程序员带来麻烦,我实在看不到有其它一丁点的好处。网上流传着的说法好像是因为带美元符号代码解析起来更容易, 性能更好。但是解释类型的语言又不只有php ,为什么其它语言就不用让程序员打这个讨厌的美元符号。每天看着满屏的美元符号,我口袋里的钱也没见多一分呀。
访问对象成员要使用箭头符号
明明按一下点号(.)就可以方便快捷的搞定的问题,却非要使用简单符号(->)来代替,真的是借我一百个脑袋也想不明白php设计者在设计这个特性是什么逻辑。难不成是因为php解释器最终会把php的代码转换成c代码执行,而c中访问指针的成员就是使用箭头符号的。如果是这样那显然是php的设计者们偷懒了,难到不能在转换成c执行的过程中多一步将点号转换为箭头符号的过程吗?不要告诉我又是因为性能问题而办不到,他们就不能为程序员想想?
数组即能当列表也能当字典
写一个函数,返回一个数组类型,但是在函数的外面,鬼知道这个数组是一个list还是一个map?写php代码不知道被这个特性坑过多少回,如果是别人写的函数, 又没有注释,那非得跑进函数里看个明白才知道应该这么样使用这个函数才是安全的。难到就不能把array拆成两个独立的类型分别代表list(列表)和map(字典)吗?这能为程序提供很大的便利,写的代码也更加不会出错。
匿名函数使用外部变量必须使用use关键字导入
这个特性不能说完全没有优点,对于代码的可维护性还是能起到正面的作用的,因为这么做能让我知道我在匿名函数体里面对于外部会有哪些依赖,让代码更可控。然而,这种写法真的是非常的不方便,每次写lambda时,要用到外部的变量时,都要使用use导入,把代码搞的看起来很臃肿,而且,因为其它语言没这个限制,习惯已经养成,所以每次都会忘记使用use导入,导致代码出错,增加排查问题的时间,这真的不是什么好玩的事。
用include导入文件
当把代码模块化时,然后在其它文件中使用,每次都需要使用这个include把文件导入进来,而且还要考虑路径的问题,在结构复杂的项目中,非常让人蛋疼。而像Java和Python之类的语言中,代码管理机制设计的非常好,想用什么import进来就可以了,根本不用考虑路径啊,文件名大小写啊之类的问题,能大大的提升开发效率。虽然,有框架可以解决这类问题,但毕竟是外部实现,使用起来总归不是那么顺畅。这也算是php一个比较大的毛病了。
总结的这五点算是php中存在问题的典范了,希望php团队能加把劲,把这些问题在未来的版本中优化掉,让开发者写代码时有更好的体验,更高的效率,让世界上最好的语言名副其实
⑥ 后台是php语言客户端用什么接口测试工具
PHP通常用来执行操作后向客户端返回结果,如果只是想看到结果,貌似直接写
html
来代码就可以了。
如果要测试的话,还要看你想要进行测试的项目内容,不同的项目测试工具也不一样。
⑦ php 程序不用框架可以吗 zend framework 有什么优点
当然可以,不过zend framework笨重的就像台坦克,已经完全没有了PHP的轻颖秀气。所谓的MVC和面向对象还有安全性方面做的好吧,毕竟是一个大型的框架。不做重型的项目还是用不到ZF,上手也比较困难。平常开发SMARTY+面向对象足够了,毕竟PHP大部分时间还在做WEB应用。
⑧ 接口自动化测试工具有哪些
接口自动化工具有以下:
1、QTP。是quicktest Professional的简称,是一种自动测试工具。使用QTP的目的是想用它来执行重复的手动测试,主要是用于回归测试和测试同一软件的新版本。因此你在测试前要考虑好如何对应用程序进行测试,例如要测试那些功能、操作步骤、输入数据和期望的输出数据等。
2、WinRunner。是一种企业级的功能测试工具,用于检测应用程序是否能够达到预期的功能及正常运行。通过自动录制、检测和回放用户的应用操作,WinRunner能够有效地帮助测试人员对复杂的企业级应用的不同发布版进行测试,提高测试人员的工作效率和质量,确保跨平台的、复杂的企业级应用无故障发布及长期稳定运行。
3、AdventNetQEngine。是一个应用广泛且独立于平台的自动化软件测试工具,可用于Web功能测试、web性能测试、Java应用功能测试、Java API测试、SOAP测试、回归测试和Java应用性能测试。