{{ $new->content }}
摘要:新增一篇新聞新增失敗輸入不符合要求請輸入標(biāo)題請輸入內(nèi)容新增文章上面代碼中的是為了防攻擊的,每個(gè)表單都必須存在。
本文我將結(jié)合簡單例子,完成laravel框架下的增刪改查,希望會(huì)對大家有所幫助。
在進(jìn)行之前,大家應(yīng)該保證自己的數(shù)據(jù)庫鏈接無誤,artisan命令能正常使用,路由鏈接無問題。
一、創(chuàng)建控制器、路由
避免影響其他路由,我們先注釋掉之前聯(lián)系時(shí)編寫的所有路由。
因?yàn)樯弦徽挛覀円呀?jīng)學(xué)會(huì)建立了資源控制器,這里再次復(fù)習(xí)一下。
1)打開CMD并切換到項(xiàng)目根目錄
2)創(chuàng)建REST風(fēng)格的控制器
php artisan make:controller NewsController --resource
3)創(chuàng)建資源路由打開routes/web.php,輸入:
Route::resource("/","NewsController");
二、展示頁面
當(dāng)我們訪問URL 127.0.0.1:9999時(shí),通過資源路由訪問的是NewsController控制器里的index方法。此刻我們在控制器里引入Model類,通過Eloquent ORM方法,往視圖層引入?yún)?shù)。
此時(shí)我們需要?jiǎng)?chuàng)建視圖層,位置在resourcec/views/news/index.blade.php。
具體代碼如下:
新聞管理
@if (count($errors) > 0)
{!! implode("
", $errors->all()) !!}
@endif
新增
@foreach ($news as $new)
{{ $new->title }}
{{ $new->content }}
id."/edit") }}" class="btn btn-success">編輯
@endforeach
下面我們訪問頁面:127.0.0.1:9999,查看數(shù)據(jù)展示情況如下:
如上圖,我們的列表展示已經(jīng)完成,不過因?yàn)闀r(shí)間問題,界面未加前端樣式,大家不要在意,至此,我們的展示頁面完成。
三、增加頁面
因?yàn)檎故卷撁纥c(diǎn)擊新增后,頁面通過路由跳轉(zhuǎn)到News控制器的create方法下:create方法如下:
上圖我們要注意,在laravel中,視圖url鏈接可以用“ / ”分割,也可以用“ . ”來分割,后者看起來更為優(yōu)雅一些。
新增一篇新聞
@if (count($errors) > 0)
新增失敗 輸入不符合要求
{!! implode("
", $errors->all()) !!}
@endif
(上面代碼中的{!! csrf_field() !!} 是為了防CSRF攻擊的,每個(gè)表單都必須存在。)
web頁面:
根據(jù)資源路由,提交該表單后,會(huì)通過路由,提交到News控制器的store方法下:
此刻輸入如下代碼:
/**
* Store a newly created resource in storage.
*
* @param IlluminateHttpRequest $request
* @return IlluminateHttpResponse
*/
public function store(Request $request)
{
var_dump($request->all());
}
打印出來傳遞過來的所有變量,如下所示:
我們可以看到傳遞過來的參數(shù)除了表字段外還有CSRF驗(yàn)證碼,_token字段,所以如果去掉這個(gè)字段,跳轉(zhuǎn)是不會(huì)成功的。
此時(shí)我們可以通過get 或者post來接收參數(shù)并賦值給數(shù)組,然后通過Eloquent 方法來入庫,具體操作如下:
/**
* Store a newly created resource in storage.
*
* @param IlluminateHttpRequest $request
* @return IlluminateHttpResponse
*/
public function store(Request $request)
{
// 對提交過來的數(shù)據(jù)進(jìn)行數(shù)據(jù)驗(yàn)證
$this->validate($request, [
"title" => "required|unique:news|max:255", // 必填、在 news 表中唯一、最大長度 255
"content" => "required", // 必填
]);
// 通過 News Model 插入一條數(shù)據(jù)進(jìn) news 表
$news = new News; // 初始化 Article 對象
$news->title = $request->get("title"); // 將 POST 提交過了的 title 字段的值賦給 news 的 title 屬性
$news->content = $request->get("content"); // 同上
// 將數(shù)據(jù)保存到數(shù)據(jù)庫,通過判斷保存結(jié)果,控制頁面進(jìn)行不同跳轉(zhuǎn)
if ($news->save()) {
return redirect("/"); // 保存成功,跳轉(zhuǎn)到 文章管理 頁
} else {
// 保存失敗,跳回來路頁面,保留用戶的輸入,并給出提示
return redirect()->back()->withInput()->withErrors("保存失敗!");
}
}
此刻我們可以看到頁面:
添加失敗,我們分析原因可以得出是因?yàn)樵谶M(jìn)行數(shù)據(jù)庫save()時(shí),laravel會(huì)自動(dòng)多出兩個(gè)字段updated_at和created_at,而我們的表是手動(dòng)建的,并沒有這兩個(gè)字段,那如何取消呢?
我們只需要往模型層加入屬性:
public $timestamps = false;
即可添加完成,并成功跳轉(zhuǎn)到新聞列表頁面,至此表單的簡單添加完成。
四、刪除頁面
接下來我們來看一下刪除頁面,相對于添加來說,刪除頁面尤為簡單,我們是通過展示頁面中的
刪除按鈕來通過表單提交方式進(jìn)行刪除操作,index.blade.php里面是這樣寫的。
可以看到表單中的提交方法仍然是POST,而為了讓資源路由識別,我們加上了{(lán){ method_field("DELETE") }}這段代碼 ,他的作用等同于
提交后,會(huì)把該條數(shù)據(jù)的ID傳遞到資源控制器的destroy方法內(nèi),下面我們來實(shí)現(xiàn)以下:
根據(jù)我們路由里寫的:
Route::resource("/","NewsController");
此刻我們會(huì)發(fā)現(xiàn),點(diǎn)擊刪除按鈕后居然報(bào)404錯(cuò)誤,跳轉(zhuǎn)路徑為127.0.0.1/{id} ,確認(rèn)刪除的表單按鈕傳遞參數(shù)無誤之后,我們在cmd中輸入 php artisan route:list,可以看到下面的資源路由信息:
我們可以看到資源路由器的更新和刪除,以及查詢方法的URL路徑是{},既花括號里是沒有值,這樣子是找不到網(wǎng)頁的,所以我們需要通過重新命名路由來實(shí)現(xiàn)即改為:
Route::resource("comment","NewsController");
這樣我們再看:
此時(shí)URL中的變量是有值的。這里我們要注意記得修改index.blade.php 以及 create.blade.php 視圖頁面的跳轉(zhuǎn)url路徑加上comment。
我們繼續(xù)完成NewsController控制器里的destroy刪除方法:
/**
* Remove the specified resource from storage.
*
* @param int $id
* @return IlluminateHttpResponse
*/
public function destroy($id)
{
News::find($id)->delete();
return redirect()->back()->withInput()->withErrors("刪除成功!");
}
至此,表單的簡單刪除已經(jīng)完成,如果需要做ajax刪除的時(shí)候,只需要把id傳遞到控制器進(jìn)行刪除,需要重寫方法,此時(shí)就需要繼續(xù)定義路由。
五、修改頁面
當(dāng)我們點(diǎn)擊index.blade.php頁面的修改之后,通過cmd里的路由資源列表可以知道,正確路徑應(yīng)該是通過超鏈接把id傳遞到控制器的edit方法里了。
“id."/edit") }}" class="btn btn-success">編輯”
此時(shí)edit方法代碼如下:
/**
* Show the form for editing the specified resource.
*
* @param int $id
* @return IlluminateHttpResponse
*/
public function edit($id)
{
// var_dump(News::find($id)->toArray());
return view("news.edit")->withNew(News::find($id));
}
通過Eloquent 對象關(guān)系映射獲取到該ID對應(yīng)的該條信息,傳遞到視圖層中,并展示出來:
edit.blade.php:
<span class="hljs-attr">Learn</span> <span class="hljs-string">Laravel 5</span>
@if (count($errors) > 0)
操作失敗 輸入不符合要求
{!! implode("
", $errors->all()) !!}
@endif
{!! csrf_field() !!}
{{----}}
修改好后表單提交,通過資源路由提交到NewsController控制器的update方法內(nèi),然后我們在update內(nèi)先打印出$request->all()的值,可以得到下面數(shù)據(jù):
然后ID也已經(jīng)傳過來了,我們通過數(shù)據(jù)庫修改即可完成修改功能,余下代碼如下:
</>code
/**
* Update the specified resource in storage.
*
* @param IlluminateHttpRequest $request
* @param int $id
* @return IlluminateHttpResponse
*/
public function update(Request $request, $id)
{
// var_dump($request->all());
$comment = News::findOrFail($id);
$comment->title = $request->get("title");
$comment->content = $request->get("content");
if($comment->save()){
return redirect("comment/");
}else{
return redirect()->back()->withInput()->withErrors("保存信息失敗");
}
}
即可完成修改,成功后跳轉(zhuǎn)到列表頁面。
學(xué)到這里我們不難發(fā)現(xiàn),這個(gè)Laravel自帶的Eloquent ORM 是一個(gè)優(yōu)美,穩(wěn)定,簡潔的ActiveRecord實(shí)現(xiàn)。
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/30636.html
摘要:一路由目錄眾所周知,對于我們熟知的任何一款框架,例如路由系統(tǒng)都是極其重要的存在。文件用于定義界面的路由。定義在中的路由都是無狀態(tài)的,并且被分配了中間件組。生成的控制器為每個(gè)行為保留了方法,同時(shí)還包括了處理動(dòng)作和的聲明注釋。 一、路由目錄 眾所周知,對于我們熟知的任何一款PHP框架,例如TP、CI、YII、路由系統(tǒng)都是極其重要的存在。 對于laravel框架也一樣,對于數(shù)據(jù)庫的操作,無非...
摘要:打開瀏覽器輸入,如無意外,將出現(xiàn)如下圖,表示框架安裝成功。四系統(tǒng)內(nèi)部后臺管理系統(tǒng)這個(gè)是框架自帶的后臺登錄管理系統(tǒng),只需要簡單的命令即可運(yùn)行。出現(xiàn)上圖即為,創(chuàng)建模型成功。 在PHP個(gè)各種web開發(fā)框架中,laravel算是一款簡潔、優(yōu)雅的開發(fā)框架,本人也剛剛接觸到laravel,通過學(xué)習(xí)大神們的一些文章,下面是我的一些心得體會(huì),希望可以給初學(xué)者一些幫助,大家一起進(jìn)步。言歸正傳: 本人環(huán)境...
摘要:從而達(dá)到了軟刪除。不過,你可以通過在查詢中調(diào)用方法來強(qiáng)制查詢已被軟刪除的模型方法也可以被用在關(guān)聯(lián)查詢只取出軟刪除數(shù)據(jù)會(huì)只取出軟刪除數(shù)據(jù)恢復(fù)被軟刪除的模型有時(shí)候你可能希望取消刪除一個(gè)已被軟刪除的模型。 Laravel 有三寶,路由、容器和 Eloquent ORM,Eloquent ORM。我個(gè)人一直比較推薦于在實(shí)際操作中學(xué)習(xí),之前簡單了解了路由和Eloquent ORM的基本用法,今天...
摘要:我們的論壇項(xiàng)目就使用了該框架。此外,麥子學(xué)院也有一個(gè)入門視頻教程,一共小時(shí)的視頻教程,涵蓋開發(fā)的方方面面,包括環(huán)境的搭建,語法介紹,項(xiàng)目結(jié)構(gòu)的組織,全球化,單元測試等內(nèi)容。博客地址更多閱讀的機(jī)制三個(gè)框架的對比 前面兩篇文章中我們已經(jīng)了解 Web(HTTP)服務(wù)器,Web應(yīng)用程序,Web框架,WSGI這些 Python Web 開發(fā)中的概念。我們知道,Web框架通過將不同Web應(yīng)用程序中...
閱讀 3435·2021-11-19 09:40
閱讀 1327·2021-10-11 11:07
閱讀 4860·2021-09-22 15:07
閱讀 2898·2021-09-02 15:15
閱讀 1972·2019-08-30 15:55
閱讀 545·2019-08-30 15:43
閱讀 886·2019-08-30 11:13
閱讀 1455·2019-08-29 15:36