1. 程式人生 > >Laravel小專案之第7節 Laravel-通過表單實現修改

Laravel小專案之第7節 Laravel-通過表單實現修改

第7節 Laravel-通過表單實現修改

7.1HTML新增連結
7.2 建立修改的表單頁面
7.3 使用模型實現修改操作

7.1 給HTML新增連結

在 \resources\views\student\index.blade.php 中給修改新增 href 屬性。

<a href="{{ url('student/update') }}">修改</a>

新增頁面和修改其實很像,我們可以複製 resources\views\student\create.blade.php,並命名為 resources\views\student\update.blade.php

將“新增學生”修改為“修改學生”。

7.2 建立修改的表單頁面

建立控制器的update方法。

/**
 * 用於修改學生資訊
 *
 * @param
 * @return    bool
 * @author    webjust [604854119@qq.com]
 */
public function update()
{
    return view('student/update');
}

新增加了一條路由:

Route::get('/', ['uses' => '[email protected]']);

// 新增表單路由
Route::any('student/create', ['uses' => '
[email protected]
'
]); Route::any('student/update', ['uses' => '[email protected]']);

此時,重新整理首頁,點選修改,應該可以開啟修改的表單頁面了吧!

但是,我們要修改,首先需要傳遞一個被修改的使用者的 主鍵id 作為引數吧!

定義一個但引數的路由

Route::any('student/update/{id}', ['uses' => '[email protected]']);

此時,我們在修改url()方法,傳遞第2個引數,使用陣列的方式,傳遞id的值:

<a href
="
{{ url('student/update', ['id' => $student->id]) }}">修改</a>

在控制器中的update()修改方法中,要接收 id 值;提交時要獲取表單的資料吧!所以加入Request依賴元件把!

這個元件很機制的就可以獲取傳遞過來的id值。

如下:

public function update(Request $request, $id)
{
    $student = Student::find($id);
    var_dump($student);

    return view('student/update');
}

我們使用傳遞過來的id主鍵,作為引數,使用模型的 find($id) 方法,即可查詢資料表中對應的那條資料了!現在我們使用 var_dump 列印,檢視結果!

修改學生的資訊,把查詢出來的資料 $student_info,傳遞給檢視。

public function update(Request $request, $id)
{
    $student_info = Student::find($id);

    return view('student/update', ['student_info' => $student_info]);
}

此時,我們繼續做一些操作,把資料填充到檢視中。

<form class="form-horizontal" method="post" action="">
    {{ csrf_field() }}
    <div class="form-group">
        <label for="name" class="col-sm-2 control-label">姓名</label>

        <div class="col-sm-5">
            <input type="text" value="{{ old('Student')['name'] ? old('Student')['name'] : $student_info->name }}" name="Student[name]" class="form-control" id="name" placeholder="請輸入學生姓名">
        </div>
        <div class="col-sm-5">
            <p class="form-control-static text-danger">{{ $errors->first('Student.name') }}</p>
        </div>
    </div>
    <div class="form-group">
        <label for="age" class="col-sm-2 control-label">年齡</label>

        <div class="col-sm-5">
            <input type="text" value="{{ old('Student')['age'] ? old('Student')['age'] : $student_info->age }}" name="Student[age]" class="form-control" id="age" placeholder="請輸入學生年齡">
        </div>
        <div class="col-sm-5">
            <p class="form-control-static text-danger">{{ $errors->first('Student.age') }}</p>
        </div>
    </div>
    <div class="form-group">
        <label class="col-sm-2 control-label">性別</label>
        <div class="col-sm-5">
            @foreach($student->sex() as $ind => $sex)
            <label class="radio-inline">
                <input type="radio"
                name="Student[sex]" {{ ((isset(old('Student')['sex']) && old('Student')['sex'] == $ind) || $student_info->sex == $ind) ? 'checked' : '' }}
                value="{{ $ind }}"> {{ $sex }}
            </label>
            @endforeach
        </div>
        <div class="col-sm-5">
            <p class="form-control-static text-danger">{{ $errors->first('Student.sex') }}</p>
        </div>
    </div>
    <div class="form-group">
        <div class="col-sm-offset-2 col-sm-10">
            <button type="submit" class="btn btn-primary">提交</button>
        </div>
    </div>
</form>

我們採用的是POST提交,提交到當前頁 update() 方法中,所以action的值留空。

7.3 使用模型實現修改操作

update() 的方法,和增加的方法差不多,所以可以使用增加的驗證方式。

public function update(Request $request, $id)
{
    $student_info = Student::find($id);

    // 修改操作
    if($request->isMethod('POST'))
    {
        // 校驗
        $this->validate($request, [
            'Student.name' => 'required|min:2|max:20',
            'Student.age' => 'required|integer',
            'Student.sex' => 'required|integer',
        ],[
            'required' => ':attribute 為必填項',
            'min' => ':attribute 長度不能小於2個字元',
            'max' => ':attribute 長度不能大於20個字元',
            'integer' => ':attribute 必須為數字',
        ],[
            'Student.name' => '使用者名稱',
            'Student.age' => '年齡',
            'Student.sex' => '性別',
        ]);

        $data = $request->input('Student');

        $student_info->name = $data['name'];
        $student_info->age = $data['age'];
        $student_info->sex = $data['sex'];
        $student_info->updated_time = time();

        // 模型的修改方法
        $ret = $student_info->save();
        if($ret)
        {
            return redirect('/')->with('success', '修改成功!')->withInput();
        } else{
            return redirect('student/create')->with('error', '修改失敗!')->withInput();
        }
    }

    return view('student/update', ['student_info' => $student_info]);
}

到此,我們的修改功能已經成功了。

如圖,左邊的hover效果,我們可以繼續優化!

把 \resources\views\shared\siderbar.blade.php 檔案修改下:

<div class="col-md-3">
    <div class="list-group">
        <a href="{{ url('/') }}"
        class="list-group-item {{ Request::path() != 'student/create' ? 'active' : '' }}">學生列表</a>
        <a href="{{ url('student/create') }}"
        class="list-group-item {{ Request::path() == 'student/create' ? 'active' : '' }}">新增學生</a>
    </div>
</div>

主要就是把條件修改了 Request::path() != '/' ? 'active' : '' 修改為 Request::path() != 'student/create' ? 'active' : ''

相關推薦

Laravel專案7 Laravel-通過實現修改

第7節 Laravel-通過表單實現修改 7.1 給HTML新增連結 7.2 建立修改的表單頁面 7.3 使用模型實現修改操作 7.1 給HTML新增連結 在 \resources\views\student\index.blade.php 中給修改新增 href 屬性。 <a href="{{ u

Laravel專案4 Laravel-通過實現新增及操作狀態提示功能

第4節 Laravel-通過表單實現新增及操作狀態提示功能 4.1 顯示新增表單檢視 4.2 通過模型實現新增 4.3 操作狀態提示 4.1 顯示新增表單檢視 修改邊欄的連結 \resources\views\shared\siderbar.blade.php <div class="col-

Laravel專案1 Laravel-案例演示

1.1 案例展示 1.2 安裝Laravel 1.1 案例展示 使用者列表頁:分頁元件 新增使用者表單: 表單驗證資訊: 訊息提醒: 詳情頁: 修改、刪除: 1.2 安裝Laravel 5.2: composer create-project --prefer

《Java從小白到大牛》7章 控制語句

編寫代碼 計算表達式 .html sco ber 多分支 聲明 簽名 group 《Java從小白到大牛》紙質版已經上架了!!! 程序設計中的控制語句有三種,即順序、分支和循環語句。Java程序通過控制語句來管理程序流,完成一定的任務。程序流是由若幹個語句組成的,語句可以是

開啟運維 7 篇——RedisDesktopManager使用、Keys通用操作、Java程式碼操作基本的Redis

RedisDesktopManager下載地址:Redis桌面管理工具官方下載地址 安裝好,直接雙擊開啟。 說明:我本機的 IP 由於使用公司的 IP ,經常會變動,但不影響連線 Linux 虛擬機器。 現在發現個問題,無法連線到 Redis 。 解決過程: ①Redi

Python--Redis實戰:四章:資料安全與效能保障:7:非事務型流水線

之前章節首次介紹multi和exec的時候討論過它們的”事務“性質:被multi和exec包裹的命令在執行時不會被其他客戶端打擾。而使用事務的其中一個好處就是底層的客戶端會通過使用流水線來提高事務執行的效能。本節將介紹如何在不使用事務的情況下,通過使用流水線來進一步提升命令的執行效能。 之前章節曾經介紹過一

python爬蟲入門————————————————--使用bs4語法獲取資料

1.裝備工作:模組安裝 1.1命令安裝方式:(開發環境:python3.6環境) 官方文件:https://www.crummy.com/software/BeautifulSoup/bs4/doc/index.html 官方文件中文版:https://www.crummy.com/

步步詳解1----ALTERA FPGA關於PLL的使用,幫你用光所有PLL

PLL 建立工程 建立新工程 引導說明,點選next 設定工程路徑,不能有中文;設定工程名稱,點選next 點選next 選擇器件庫,這裡選擇cyclone IV E,器件型號為EP4C6EE22C8,該器件有兩個PLL; 點選next 呼叫

Android 專案--SQLite 使用法門

package com.terry; import android.app.Activity; import android.database.Cursor; import android.database.sqlite.SQLiteCursor; import android.os.Bundle

Storm入門7章使用非JVM語言開發

有時候你可能想使用不是基於JVM的語言開發一個Storm工程,你可能更喜歡使用別的語言或者想使用用某種語言編寫的庫。 Storm是用Java實現的,你看到的所有這本書中的spout和bolt都是用java編寫的。那麼有可能使用像Python、Ruby、或者JavaScript這樣的語言編寫s

Netty原始碼分析2章(NioEventLoop)---->7: 處理IO事件

  Netty原始碼分析第二章: NioEventLoop   第七節:處理IO事件   上一小節我們瞭解了執行select()操作的相關邏輯, 這一小節我們繼續學習select()之後, 輪詢到io事件的相關邏輯: 回到NioEventLoop的run()方法:

Netty原始碼分析4章(pipeline)---->7: 前章節內容回顧

  Netty原始碼分析第四章: pipeline   第七節: 前章節內容回顧   我們在第一章和第三章中, 遺留了很多有關事件傳輸的相關邏輯, 這裡帶大家一一回顧 首先看兩個問題: 1.在客戶端接入的時候, NioMessageUnsafe的read方法中pip

android專案新聞客戶端一

 開篇--基於Android的小巫新聞客戶端開發 2013年2月4日 小年 天氣晴 大三寒假ing。。。。 一.專案簡介   關於小巫新聞客戶端的開發是之前在參加學校的軟體開發大賽的一個作品,已經過去了2個多月了吧,一直想把這個軟體的整個開發過程給記錄下來,好讓自己印象

7 Linux核心如何裝載和啟動一個可執行程式【Linux核心分析】

一、實驗要求 分析exec*函式對應的系統呼叫處理過程 二、實驗內容 理解編譯連結的過程和ELF可執行檔案格式,詳細內容參考本週第一節; 程式設計使用exec*庫函式載入一個可執行檔案,動態連結分為可執行程式裝載時動態連結和執行時動態連結,程式設

初學構建專案倉庫管理系統主頁面的實現(二)

       上一篇部落格我講了資料庫的建立以及管理員表的實現和管理員登入頁面的實現,這一篇我來說說倉庫管理系統的主頁面的實現。主要是用eclipse中的外掛windowbuilder來實現。其下載地址為:http://www.eclipse.org/windowbuild

Android專案三 splash介面

------- 源自夢想、永遠是你IT事業的好友、只是勇敢地說出我學到! ---------- 按慣例,寫在前面的:可能在學習Android的過程中,大家會和我一樣,學習過大量的基礎知識,很多的知識點也都能說出了123來,但是這些孤立的點終究顯得太零散了,因此,我想從今天

Android專案學生管理系統(附原始碼)

專案部分截圖: 主要功能: 管理員:註冊,登入管理系統,查詢學生資訊,新增學生資訊,檢視成績排名,修改學生資訊,刪除學生資訊,強制下線 學生:登入,檢視個人詳細資訊,修改密碼 以上功能用資料庫實現 UI部分沒做太多的修飾,主要用了圓形頭像,自定義圓角butt

C語言 7 如何將字串指標指向的內容賦值給陣列

#include <stdio.h> int main() { char name[20] = {0}; // 陣列定義的時候需要初始化 const char* s = "as

Mybatis學習7 -- 刪除

pda -c commit osi session batis mysql ssi tsql 接口 int deleteShopById(int id); 映射 <delete id="de

數據結構學習7章 樹和二叉樹

順序 兩層 遍歷二叉樹 data 等價 樹的高度 高度 問題 truct 數據結構學習之第7章 樹和二叉樹 0x7.1.1 樹的基本概念 ?1.樹的定義 ? 樹是由n(n>=0)個結點(或元素)組成的有限集合(記為T) ? 如果n>0,這n個結點中有且僅有一個結