摘要:簡介是一套簡介,優雅開發框架,通過簡單,高雅,表達式語法開發應用。服務器需要有該目錄及所有子目錄的寫入權限可用于存儲應用程序所需的一些文件該目錄下包括緩存和編譯后的視圖文件日志目錄測試目錄該目錄下包含源代碼和第三方依賴包環境配置文件。
簡介
Laravel是一套簡介,優雅PHP Web開發框架(PHP Web Framework), 通過簡單,高雅,表達式語法開發Web應用。
特點:
語言優美
用戶體驗好
Composer使用Composer安裝Laravel
Composer中文鏡像
修改composer的全局配置文件
> composer config -g repo.packagist composer https://packagist.phpcomposer.com
創建一個Laravel項目
> composer create-project laravel/laravel --prefer-dist > composer create-project laravel/laravel blog --prefer-dist
--prefer-dist 下載壓縮版本.
blog別名
PHP版本>=5.5.9
開啟rewrite和vhost
httpd.conf // 配置虛擬目錄
開啟PHP擴展
extension=php_openssl.dll extension=php_mbstring.dll extension=php_pdo_mysql.dll
配置偽靜態.htaccess, 和 入口文件放在同級目錄
Laravel參考文檔5.1
Laravel參考文檔5.2
Laravel目錄結構
目錄或文件 | 說明 |
---|---|
app | 包含Controller、Model、路由等在內的應用目錄,大部分業務將在該目錄下進行 |
– Events | 事件目錄 |
– Exceptions | 包含了自定義錯誤和異常處理類 |
– Http | HTTP傳輸層相關的類目錄 |
– – Controllers | 控制器目錄 |
– – Middleware | 中間件目錄 |
– – Requests | 請求類目錄 |
– – Kernel.php | 包含http中間件和路由中間件的內核文件 |
– – routes.php | 強大的路由 |
– Jobs | 該目錄下包含隊列的任務類 |
– Listeners | 監聽器目錄 |
– Providers | 服務提供者目錄 |
– User.php | 自帶的模型實例,新建的Model默認也存儲在該目錄 |
bootstrap | 框架啟動載入目錄 |
– cache | 存放框架啟動緩存,web服務器需要有該目錄的寫入權限 |
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 | 數據庫相關目錄 |
public | 網站入口,應當將ip或域名指向該目錄而不是根目錄。可供外部訪問的css、js和圖片等資源皆放置于此目錄 |
- .htaccess | Apache服務器用該文件重寫URL |
– web.config | IIS服務器用該文件重寫URL |
resources | 資源文件目錄 |
– assets | 可存放包含LESS、SASS、CoffeeScript在內的原始資源文件 |
– lang | 本地化文件目錄 |
– views | 視圖文件 |
storage | 存儲目錄。web服務器需要有該目錄及所有子目錄的寫入權限 |
– app | 可用于存儲應用程序所需的一些文件 |
– framework | 該目錄下包括緩存、sessions和編譯后的視圖文件 |
– logs | 日志目錄 |
tests | 測試目錄 |
vendor | 該目錄下包含Laravel源代碼和第三方依賴包 |
.env | 環境配置文件。config目錄下的配置文件會使用該文件里面的參數,不同生產環境使用不同的.env文件即可 |
artisan | 強大的命令行接口,可以在app/Console/Commands下編寫自定義命令 |
composer.json | 存放依賴關系的文件 |
composer.lock | 鎖文件,存放安裝時依賴包的真實版本 |
gulpfile.js | gulp 配置文件 |
package.json | |
phpspec.yml | phpspec(一種PHP測試框架)配置文件 |
phpunit.xml | phpunit(一種PHP測試框架)配置文件 |
server.php | PHP內置的Web服務器將把這個文件作為入口。以public/index.php為入口的可以忽略掉該文件 |
composer.json配置
{ "name": "laravel/laravel", //項目名稱 "description": "The Laravel Framework.", //描述 "keywords": ["framework", "laravel"], //關鍵詞 "license": "MIT", //許可協議 "type": "project", //類型 "require": { "php": ">=5.5.9", //PHP版本 "laravel/framework": "5.2.*" //框架版本 }, "require-dev": { //依賴包 "fzaninotto/faker": "~1.4", "mockery/mockery": "0.9.*", "phpunit/phpunit": "~4.0", "symfony/css-selector": "2.8.*|3.0.*", "symfony/dom-crawler": "2.8.*|3.0.*" }, "autoload": { //自動加載 "classmap": [ "database" ], "psr-4": { //一種自動加載的規范 "App": "app/" } }, "autoload-dev": { //加載測試 "classmap": [ "tests/TestCase.php" ] }, "scripts": { //執行腳本 "post-root-package-install": [ "php -r "copy(".env.example", ".env");"" ], "post-create-project-cmd": [ "php artisan key:generate" ], "post-install-cmd": [ "php artisan clear-compiled", "php artisan optimize" ], "post-update-cmd": [ "php artisan clear-compiled", "php artisan optimize" ] }, "config": { //配置項 "preferred-install": "dist" //優先安裝壓縮版 }, "repositories": { //配置composer鏡像 "packagist": { "type": "composer", "url": "https://packagist.phpcomposer.com" } } }HTTP 基礎路由
基礎路由
Route::get($uri, $callback); Route::post($uri, $callback); Route::put($uri, $callback); Route::patch($uri, $callback); Route::delete($uri, $callback); Route::options($uri, $callback); Route::match(["get", "post"], "/test", $callback); // 匹配各種HTTP請求 Route::any("foo", $callback); // 任何請求匹配
字體:
controller
Route::controller("index", "IndexController");
class IndexController extends Controller { public function getIndex() { return "Index"; } }
路由參數
必選參數
一個參數和多個參數的情況
語法:{字段}
Route::get("user/{id}", function($id) { echo $id; }); Route::get("user/{id}/age/{num}", function($id, $num) { echo "id: " . $id . " num: " . $num; });
可選參數
語法:
{字段?}
匿名函數參數定義初值
Route::get("user/{name?}", function ($name = null) { echo $name; });
多個參數下,最后一個參數可以可選。
參數約束
正則約束: 主要做類型限制.
語法:
增加where()方法條件.
Route::get("user/{name}", function ($name) { // })->where("name", "[A-Za-z]+"); Route::get("user/{id}", function ($id) { // })->where("id", "[0-9]+"); Route::get("user/{id}/{name}", function ($id, $name) { // })->where(["id" => "[0-9]+", "name" => "[a-z]+"]);
高級路由
http普通路由(獲取路由地址)
調用:route(profile)
Route::get("user1", ["as" => "profile", function() { var_dump(route("profile")); // 路由地址 // http://www.lara.com/user1 }]);
http控制器路由(在控制器中獲取路由地址)
Route::get("user", [ "as" => "profile", "uses" => "UserController@index" ]);
路由分組
把類似功能的路由分組,便于管理維護。
// Route::get("admin/login", "AdminIndexController@login"); // Route::get("admin/index", "AdminIndexController@index"); // 提取 分組admin 和命名空間 Route::group(["prefix" => "admin", "namespace" => "Admin"], function () { Route::get("login", "IndexController@login"); Route::get("index", "IndexController@index"); });控制器
基礎控制器
固定模板
需要命名空間,
命名空間作用:告知自動加載機制,怎樣索引到當前目錄文件.
服務端: $file = Input::file("myfile"); // 檢驗上傳的文件是否有效 if ($file->isValid()) { $clientName = $file->getClientOriginalName(); // 獲取文件名 $tmpName = $file->getFileName(); // 緩存的tmp文件夾中的文件名 $realPath = $file->getRealPath(); // tmp文件夾中的絕對路徑 $extension = $file->getClientOriginalExtension(); // 后綴名 $mimeType = $file->getMimeType(); // mime 類型 $path = $file->move("storage/uploads"); // 移動 // 存放默認位置 `public/storage/uploads/xxxx.tmp` // 自定義目錄 $path = $file->move(app_path()."/storage/uploads", $newName); // app_path() 計算的路徑是app文件夾所在的路徑 // $newName = md5(date("ymdhis").$clientName).".".$extension; }創建控制器:
所有的控制器方法,都需要在路由中做配置.
Route::get("controller", "IndexController@index"); // 控制器文件名@控制器方法名使用Artisan方式創建控制器:
> php artisan make:controller UserController使用Artisan查看路由列表:
> php artisan route:listRESTful 資源控制器
一次性可以配置一堆相同類似的路由。
語法:Route::resource("article", "ArticleController@index");$ php artisan route:list +--------+-----------+------------------------------+-----------------------+------------------------------------------------------------+------------+ | Domain | Method | URI | Name |Action | Middleware | +--------+-----------+------------------------------+-----------------------+-----------------------------------------------------------+------------+ | | GET|HEAD | / | | Closure | | | | POST | admin/article | admin.article.store | AppHttpControllersAdminArticleController@index@store | | | | GET|HEAD | admin/article | admin.article.index | AppHttpControllersAdminArticleController@index@index | | | | GET|HEAD | admin/article/create | admin.article.create | AppHttpControllersAdminArticleController@index@create | | | | DELETE | admin/article/{article} | admin.article.destroy | AppHttpControllersAdminArticleController@index@destroy | | | | PUT|PATCH | admin/article/{article} | admin.article.update | AppHttpControllersAdminArticleController@index@update | | | | GET|HEAD | admin/article/{article} | admin.article.show | AppHttpControllersAdminArticleController@index@show | | | | GET|HEAD | admin/article/{article}/edit | admin.article.edit | AppHttpControllersAdminArticleController@index@edit | | +--------+-----------+------------------------------+-----------------------+-----------------------------------------------------------+------------+中間件中間件的理解:在路由上層加了一層保護,過濾。
web中間件
web中間件模板:
Route::group(["middleware" => ["web"]], function () { // });使用web中間件,才能使用Session服務和Csrf服務的保護
Route::group(["middleware" => "web"], function() { Route::get("/", function () { session(["key" => 11]); return view("welcome"); }); Route::get("test", function() { var_dump(session("key")); return "test"; }); });自定義中間件
在Kernel.php文件中修改 $routeMiddleware 配置
protected $routeMiddleware = [ "auth" => AppHttpMiddlewareAuthenticate::class, "auth.basic" => IlluminateAuthMiddlewareAuthenticateWithBasicAuth::class, "guest" => AppHttpMiddlewareRedirectIfAuthenticated::class, "throttle" => IlluminateRoutingMiddlewareThrottleRequests::class, "admin.login" => AppHttpMiddlewareAdminLogin::class // 增加自定義中間件 ];使用自定義中間件
Route::group(["middleware" => "admin.login"], function () { });artisan 方式創建中間件
> php artisan make:middleware AdminLoginCSRF必須要使用中間件調用.
視圖視圖:處理結果的可視化
渲染視圖:
語法:view(視圖路徑)public function login() { return view("admin/login"); }數據傳遞:
with
傳參
compact
with()
傳入:
public function login() { $name = "NAME"; return view("admincolor")->with("name", $name); }
public function login() { $data = [ "name" => "NAME", "age" => 24 ]; return view("admincolor")->with("data", $data); }顯示:
傳參
return view("admincolor", ["name" => "NAME"]);
return view("admincolor", $data);compact()
return view("admincolor", compact("title"));Blade 基礎用法顯示變量
{{$title}}屏蔽{{}}
語法:@{{字段}}@{{$title}}解析HTML標簽
流程控制{!!$title!!}if
使用@if,@elseif, @else , @endif
@if ($data["age"] > 20) {{$data["name"]}} @else no @endifunless
除非if取反
@unless ($data["age"] > 20) {{$data["name"]}} @endunlessfor
@for ($i=0; $i<5; $i++) {{$i}} @endforforeach
@foreach ($data["article"] as $v)子視圖{{$v}}@endforeachinclude
引入子視圖
@include("admin.public.header") 中間@include("admin.public.footer")傳入參數
@include("admin.public.header", ["page" => "index"])yield & exnteds
占位視圖
header@yield("content")footer利用extends,使用占位視圖.
@extends("admin.layouts.index") @section("content")替換內容@endsection()在主模板定義內容,父模板引用.
主模板:
語法:@section("name") // conent @show
header@yield("content") @section("module")主模板@showfooter子模板使用:需要在section范圍中使用
@extends("admin.layouts.index") @section("content")讀取配置項替換內容@parent @endsection().ENV文件及配置項讀取
.env配置項:
APP_ENV=local // 運行環境 APP_DEBUG=true // 調試模式 APP_KEY=iCfdjsHjdgoBp5HS9JmDNWyR1CCSmsu3 // 項目安全配置項的密>鑰 // php artisan key:generate APP_URL=http://localhost // 項目根目錄 // 數據庫配置項 DB_HOST=127.0.0.1 // 服務器地址 DB_PORT=3306 // 服務器端口 DB_DATABASE=homestead // 數據庫 DB_USERNAME=homestead // 用戶名 DB_PASSWORD=secret // 密碼 // 驅動設置 CACHE_DRIVER=file // 緩存驅動 SESSION_DRIVER=file // session驅動 QUEUE_DRIVER=sync // 隊列模式 // redis 配置 REDIS_HOST=127.0.0.1 REDIS_PASSWORD=null REDIS_PORT=6379 // mail 郵件配置 MAIL_DRIVER=smtp MAIL_HOST=mailtrap.io MAIL_PORT=2525 MAIL_USERNAME=null MAIL_PASSWORD=null MAIL_ENCRYPTION=nullconfig/app.php
讀取使用.env文件return [ "debug" => env("APP_DEBUG", false) // 如果`.env`文件中沒有配置APP_DEBUG就使用默認值false ]控制器中讀取配置項
public function view() { var_dump(config("app.debug")); var_dump(config("app.timezone")); var_dump(config("database.connections.mysql.port")); echo IlluminateSupportFacadesConfig::get("webConf.web_title"); }數據庫 數據庫連接需要引入DB類
use IlluminateSupportFacadesDB;測試是否連接成功數據庫
$pdo = DB::connection()->getPdo(); dd($pdo);查詢數據$users = DB::table("user")->get(); $user = DB::table("user")->where("user_id", 1)->get(); $user = DB::table("user")->where("user_id", ">", 2)->get();Eloquent ORM模型操作數據庫
每張數據表都對應一個與該表進行交互的“模型”,模型允許在表中進行數據查詢,以及插入、更新、刪除等操作.創建模型
> php artisan make:model Http/Model/User查詢數據
需要引入User模型use AppHttpModelUser;
$user = User::where("user_id", 1)->get();laravel在更新和修改數據的時候,都會增加一個字段update_at或者create_at.表示能夠記的更新記錄的時間。
解決方法:
在數據庫中增加update_at或者create_at
在模型中禁止laravel管理數據的方式:public $timestamps = false; // 默認的時間戳禁止
設置數據表名,設置表的主鍵
find()
查詢數據&更新數據
$user = User::find(2); // 查詢數據 dd($user); $user->user_name = "color"; // 更新數據 $user->update();后臺功能驗證碼
laravel沒有開啟原生的php的session, 需要在入口文件中開啟session.
引入類,路徑問題,需要到基類中尋找 new Code();
/** * 后臺登陸驗證碼 */ public function code() { $code = new Code(); echo $code->make(); }Input服務
Input::all() 獲取表單數據CSRF認證
在提交過程中需要前臺傳入csrf驗證token值字段:{{csrf_field()}}
源碼中顯示:
Crypt加密和解密
雖然加密過程中一直變化數據,但是有一次結果抓取住就可以解密。
Crypt::encrypt(); Crypt加密
Crypt::decrypt(); Crypt解密判斷登陸邏輯:
/** * 登陸狀態 */ public function login() { if ($input = Input::all()) { // 判斷驗證碼 if (strtoupper($input["code"]) != strtoupper($this->getCode())) { return back()->with("msg", "驗證碼錯誤!"); } // 用戶名和密碼 if (!$input["user_name"] && !$input["user_pass"]) { return back()->with("msg", "用戶名或密碼不能為空!"); } else { // 存在用戶名和密碼 // DB::table("user")->where("user_id", $input["user_name"]) $user = User::first(); if ($user->user_name != $input["user_name"] || Crypt::decrypt($user->user_pass) != $input["user_pass"]) { return back()->with("msg", "用戶名或密碼不正確!"); } // 登陸信息寫入session中. session(["users" => $user]); // 跳轉后臺首頁 return redirect("admin/index"); } } else { return view("admin.login"); } }后臺首頁、歡迎頁面修改及子視圖布局
Laravel5.2中PHP獲取服務器操作系統等信息:
PHP程式版本:
zend版本:
mysql支持
服務器操作系統:
服務端信息:
最大上傳限制:
最大執行時間:
腳本運行占用最大內存:
獲得服務器系統時間: date_default_timezone_set(PRC); echo date("Y-m-d G:i:s");
查詢當前連接的MYSQL數據庫的版本php原生函數mysql_get_server_info();管理員登陸中間件設置和注銷登陸
利用中間件驗證登錄信息.
注冊中間件:app/Htpp/Kernel.php
protected $routeMiddleware = [ ];利用session判斷頁面是否可以進入.
public function handle($request, Closure $next) { // 判斷session中的登陸信息 if (!session("users")) { return redirect("admin/login"); } return $next($request); }密碼修改及Validation驗證
Validator服務
引入use IlluminateSupportFacadesValidator;
Validator::make();表單驗證
public function pass() { if ($input = Input::all()) { // 驗證規則 $rules = [ "password" => "required|between:5,20|confirmed", ]; // 提示信息 $msg = [ "password.required" => "新密碼不能為空", "password.between" => "新密碼必須在5-20位之間", "password.confirmed" => "新密碼和確認密碼不一致" ]; $validator = Validator::make($input, $rules, $msg); if ($validator->passes()) { // 對比原密碼 $user = User::first(); $_password = Crypt::decrypt($user->user_pass); // 判斷輸入的 原始密碼和 數據庫存儲的密碼 if ($input["password_o"] != $_password) { return back()->with("msg", "原密碼輸入錯誤"); } // 密碼修改 $user->user_pass = $_password = Crypt::encrypt($input["password"]); $user->update(); return back()->with("msg", "密碼修改成功"); } else { // dd($validator->errors()->all()); return back()->withErrors($validator); } } else { return view("admin.pass"); } }Category
文章分類表的創建
創建表
DROP TABLE IF EXISTS `b_category`; CREATE TABLE `b_category` ( `cate_id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT "主鍵", `cate_name` varchar(50) COLLATE utf8_bin NOT NULL DEFAULT "" COMMENT "分類名稱", `cate_title` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT "" COMMENT "文字說明", `cate_keywords` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT "" COMMENT "關鍵詞", `cate_description` varchar(255) COLLATE utf8_bin NOT NULL DEFAULT "" COMMENT "描述", `cate_view` int(10) NOT NULL DEFAULT "0" COMMENT "查看次數", `cate_orer` tinyint(4) NOT NULL DEFAULT "0" COMMENT "排序", `cate_pid` int(11) DEFAULT "0" COMMENT "父級id", PRIMARY KEY (`cate_id`) ) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_bin COMMENT="文章分類";后臺文章分類頁多級分類列表
/** * 家譜樹 * @param {Object} $data 傳入所有數據 * @param {String} $field_name 字符串 * @param {String} $field_id cate_id 字段 * @param {String} $field_pid cate_pid 字段 * @param {Int} $pid 頂級分類id * @return {Array} 相聯系的數據 */ public function getTree($data, $field_name = "-- ", $field_id = "cate_id", $field_pid = "cate_pid", $pid = 0) { // 存放處理后數據 $arr = array(); /** * 1. 遍歷 pid為0 (頂級目錄) , 壓入數組 * * 2. pid 不為0 的,對比pid,壓入數組后續中. */ foreach($data as $k => $v) { if ($v[$field_pid] == $pid) { $arr[] = $data[$k]; foreach($data as $m => $n) { // 對比 $v[cate_id] 和 $data[cate_pid] 對比 if ( $n[$field_pid] == $v[$field_id] ) { $data[$m]["_cate_name"] = $field_name; $arr[] = $data[$m]; } } } } return $arr; }Ajax異步修改分類排序
注意需要token字段.表單數據收集
$input = Input::except("_token"); // 不需要使用某些方法
$input = Input::all();
$input = Input::get("type"); // 獲取某個字段
$input = Input::file("Filedata"); // 獲取文件中的信息
參數中表單收集數據
public function store(Request $request) { // 接收表單數據 $input = $requset->all(); }過濾入庫數據
在模型中增加屬性protected $guarded = []; // 當前有那些不需要寫入數據庫. // 開啟黑名單 protected $fillable = ["cate_id"]; // 開啟白名單form提交put數據
form利用hidden隱藏域put接收數據
/** * put admin/category/{category} 更新分類 */ public function update($cate_id) { $input = Input::except("_token", "_method"); $res = Category::where("cate_id", $cate_id)->update($input); if (!$res) { // 更新數據失敗 return back()->with("errors", "添加失敗"); } else { // 更新數據成功 return redirect("admin/category"); } }異步ajax提交delete刪除數據
// 異步刪除數據 $.ajax({ url: "{{url("admin/category")}}" + "/" +$cate_id, type: "post", data: { _token: "{{csrf_token()}}", _method: "delete" }, success: function(data) { console.log(data); } });后臺接收delete數據
/** * delete admin/category/{category} 刪除單個分類 */ public function destroy($cate_id) { $res = Category::where("cate_id", $cate_id)->delete(); // 處理頂級分類 Category::where("cate_pid", $cate_id)->update(["cate_pid" => 0]); if (!$res) { // 刪除失敗 $data = [ "status" => 0, "msg" => "分類刪除失敗" ]; return json_encode($data); } else { // 刪除成功 $data = [ "status" => 1, "msg" => "分類刪除成功" ]; return json_encode($data); } }頂級分類刪除處理方式:
頂級分類需要看是否有下級分類,沒有刪除,有提示不允許刪除
刪除頂級分類,把頂級分類x下一級子分類都調整為頂級分類.
// 處理頂級分類 Category::where("cate_pid", $cate_id)->update(["cate_pid" => 0]);創建文章表
create table b_article ( art_id int primary key auto_increment, art_title varchar(100) default "" not null comment "標題", art_tags varchar(10) default "" not null comment "標簽", art_keywords varchar(100) not null default "" comment "關鍵詞", art_description varchar(255) not null default "" comment "描述", art_thumb varchar(255) not null default "" comment "縮略圖", art_content text not null default "" comment "文章內容", art_time int(11) not null default 0 comment "發布時間", art_editor varchar(50) not null default "" comment "發布作者", art_view int(11) not null default 0 comment "查看次數" ) engine myisam charset utf8;Article
文章分類資源路由
$ php artisan route:list +--------+--------------------------------+--------------------------------+------------------------+-----------------------------------------------------------+-----------------+ | Domain | Method | URI | Name | Action | Middleware | +--------+--------------------------------+--------------------------------+------------------------+-----------------------------------------------------------+-----------------+ | | GET|HEAD | / | | AppHttpControllersIndexController@index | | | | POST | admin/article | admin.article.store | AppHttpControllersAdminArticleController@store | web,admin.login | | | GET|HEAD | admin/article | admin.article.index | AppHttpControllersAdminArticleController@index | web,admin.login | | | GET|HEAD | admin/article/create | admin.article.create | AppHttpControllersAdminArticleController@create | web,admin.login | | | GET|HEAD | admin/article/{article} | admin.article.show | AppHttpControllersAdminArticleController@show | web,admin.login | | | DELETE | admin/article/{article} | admin.article.destroy | AppHttpControllersAdminArticleController@destroy | web,admin.login | | | PUT|PATCH | admin/article/{article} | admin.article.update | AppHttpControllersAdminArticleController@update | web,admin.login | | | GET|HEAD | admin/article/{article}/edit | admin.article.edit | AppHttpControllersAdminArticleController@edit | web,admin.login | +--------+--------------------------------+--------------------------------+------------------------+-----------------------------------------------------------+-----------------+
class CategoryController extends CommonController { /** * get admin/category 全部分類列表 */ public function index() { } /** * get admin/category/create 添加分類 get */ public function create() { } /** * get admin/category/{category} 顯示單個分類信息 */ public function show() { } /** * delete admin/category/{category} 刪除單個分類 */ public function destroy($cate_id) { } /** * put admin/category/{category} 更新分類 */ public function update($cate_id) { } /** * get admin/category/{category}/edit 編輯分類 */ public function edit($cate_id) { } // post admin/category 添加分類 post public function store() { } }引入富文本編輯器
縮略圖上傳
uploadify插件展示:
上傳:
/** * 圖片上傳 */ public function uploadImg() { $file = Input::file("Filedata"); // 檢驗上傳的文件是否有效 if ($file->isValid()) { $extension = $file->getClientOriginalExtension(); // 后綴名 // 自定義目錄 $newName = date("ymdhis").mt_rand(100, 999).".".$extension; // 201702191657000000aaa.png $path = $file->move(base_path()."/uploads", $newName); // base_path() 項目根目錄 $filePath = "/uploads/".$newName; echo $filePath; } }
laravel普通的文件上傳
客戶端:
分頁服務
/** * GET admin/article * 全部文章列表 */ public function index() { // 分頁 $data = Article::orderBy("art_id", "desc")->paginate(2); return view("admin.article.index")->with("data", $data); }
顯示:
{{$data->links()}}
實體輸出
{!! $title !!}
friendlyLink
使用Migrations數據庫遷移創建數據表
數據遷移和數據填充
創建數據表
創建文件
php artisan make:migration create_links_table
書寫表信息
engine = "myisam"; $table->increments("link_id"); $table->string("link_name")->default("")->comment("名稱"); $table->string("link_title")->default("")->comment("標題"); $table->string("link_url")->default("")->comment("鏈接"); $table->integer("link_order")->default(0)->comment("排序"); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::drop("links"); } }
執行填充
php artisan migrate
使用Seeding填充測試數據
創建文件
php artisan make:seeder LinksTableSeeder
寫入字段
insert([ "name" => str_random(10), "email" => str_random(10)."@gmail.com", "password" => bcrypt("secret"), ]); } }
在DatebaseSeeder.php文件中執行
call(LinksTableSeeder::class); // 執行LinksTableSeeder.php文件 } }
寫入數據庫
php artisan db:seed
網站配置模塊
統計相關組件
默認圖片
列表頁版權提示
每天發布文章數
網站狀態
配置項標題
網站配置表
create table b_config( conf_id int auto_increment primary key, conf_title varchar(50) not null default "" comment "配置項標題", conf_name varchar(50) not null default "" comment "變量名", conf_content text comment "變量名值", conf_order int(11) not null default 0 comment "排序", conf_tips varchar(255) not null default "" comment "說明&備注", conf_field_type varchar(50) not null default "" comment "字段類型", conf_field_value varchar(255) not null default "" comment "字段類型值" )engine myisam charset utf8;
生成網站配置項文件
/** * 生成配置項文件 */ public function putFile() { // echo IlluminateSupportFacadesConfig::get("webConf.web_title"); // 拿取配置項信息 // 拿取文件 $config = Config::pluck("conf_content", "conf_name")->all(); // 過濾要的字段及信息 $path = base_path() . "configwebConf.php"; // 重組數據 ,寫入配置文件 $str = "模型方法:
$config = Config::pluck("conf_name", "conf_content"); // 過濾要的字段及信息 $coinfAll = Config:all(); // 獲取全部字段及信息在模板中讀取配置項信息
Config::get("web.web_title"); // 文件名.鍵值// 獲取最新的數據 $data = Article::where("cate_id", $cate_id)->orderBy("art_time", "desc")->paginate(4); // 讀取子分類 $submenu = Category::where("cate_pid", $cate_id)->get(); // 賦值模板 View::share("$nav", $nav);laravel函數
dd() 打印消息
back() 返回前一請求,
back()->with("msg", txt) 返回前一個請求,帶回信息.
back()->withErrors($validator); 返回前一個請求,帶回驗證信息.
view() 顯示視圖頁面
confing()讀取配置項
session() 獲取和設置session字段
redirect() 跳轉頁面,重定向
base_path()獲取根目錄文件夾路徑
app_path()獲取app目錄的路徑
take() 模型獲取指定條數:Article::orderBy("art_view", "desc")->take(6)->get();laravel模板中使用的函數
asset()顯示靜態資源.(css&img&js)
url() 地址引用 (使用/分割目錄)
method_field("PUT")提交type
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/22356.html
閱讀 1455·2021-09-10 11:27
閱讀 2410·2019-08-30 15:53
閱讀 1322·2019-08-30 13:10
閱讀 2974·2019-08-30 11:09
閱讀 1084·2019-08-29 17:23
閱讀 668·2019-08-29 17:05
閱讀 2948·2019-08-29 15:10
閱讀 2346·2019-08-29 13:22