① 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應用性能測試。