【log】12/11 checking project:(Laravel)snsTest

環境準備以及laravel安裝

Laravel 安裝指南javascript

composer create-project laravel/laravel snsTest

problem:下載下來的laravel沒法啓動服務器,會報錯。php

以前看的教程彷佛還要改些什麼,嫌麻煩用的在LaraBase上介紹過的一鍵安裝包: http://www.golaravel.com/download/ html

php artisan serve啓用的是8000端口,這裏換個8888啓動服務器,設置:java

php -s localhost:8888 -t public

登陸界面準備以及數據庫建表

新建了一個Sites controller
jquery

php artisan make:controller Sitescontroller

在新建的controller裏註冊login方法:
laravel

public function login(){ return view('sites.login'); }

在Views視圖文件夾下新建sites/login.blade.php。git

problem:div水平垂直居中,更改submit樣式[backgroud:rgba()],a:hover{text-decoration:none;}github

數據庫建表:users.sql sql

差點不許要用戶郵箱,可是同事說讓用戶記id也不可能,我一想也是。因此字段內容就比較多了。數據庫

數據庫鏈接,修改env.文件:

DB_HOST=localhost
DB_DATABASE=snsTest
DB_USERNAME=root
DB_PASSWORD=""

建表的時候又瞭解到一些SQL的數據結構:好比int(4 byte)和tinyint(1 byte),time(3 byte)和datetime(8 byte)等區別

而後我想再加個功能,就是用戶能夠看到本身的留言,須要用到關聯表:

http://database.51cto.com/art/201010/230077.htm

上面的作法有誤

laravel有本身一套登陸註冊體系……http://laravelacademy.org/post/1258.html

在auth文件夾下有相應的authController,在database\migration中也有擬建好的user表……

在想要確認登陸使用postLogin方法時,報錯:

problem:TokenMismatchException in VerifyCsrfToken.php line 53

解決辦法:在form表單中再添加下面代碼:

{!! csrf_field() !!}

或者:

<input type="hidden" name="_token" value="{!! csrf_token() !!}">

剛看到的一篇文章,見識了各類登陸……:http://laravelbase.com/collections/1/51#

嗯繼續報錯:

problem: Class 'App\Http\Controllers\Auth\Auth' not found

解決辦法:在AuthController上面加上:use Auth;


2015/11/27

一次做死之旅,修改了端口,php -S localhost:1026 -t punlic

不知道動了什麼,總之數據庫連不上了(血淚教訓=-=總之不要亂改,底層問題還要鑽研)

也找不到配置文件裏的bin-address,同事建議重裝WAMP,重裝後我很開心,由於連上了?然而仍是error,表找不到,drop不能create不能,記得卸載WAMP時有留下bin、www、alias文件夾,MySQL的各類文件配置都在,查到又說drop不行就直接去文件夾下刪掉就行了,database是以directory存在,當file沒有的時候就刪不掉。因此刪掉了一些database,而後又用Nacicat重建3306鏈接,好吧能用了(淚目


Controller接受view傳過來的值,method=POST

方法一:

use INPUT
 (方法中添加) $email  = Input::get('email') ;

找了好久終於看實打實的代碼,看到了第二種方法,小白感激不盡。做者balabala抱怨了一堆真可愛:link

方法二:

public function postLogin(Request $request){
 $credentials = $this->getCredentials($request);}

而後英語要學好!

ThrottlesLogins:用於限制登陸次數的

真是愈來愈糟糕,

problem:always redirect to loacalhost:8000/home

無論輸入什麼路徑都是,而後看到解決辦法:link

沒心情看英語,了註釋掉了guest的middleware,好使了,今天什麼都沒幹……

臥槽,果真是密碼的問題!,靠靠靠靠靠

table裏面password字段全是是明文啊啊啊啊啊,authenticate怎麼可能通得過!!!!!!

id=7的時候忽然有條加密的記錄,試了一下就登陸成功了,以前也想過是否是這個可能了,可是create方法裏是加密了的。

postRegister方法裏提交到數據庫裏的是:

User::create($request->all());

修改成:

Auth::login($this->create($request->all()));

能夠看到數據庫裏密碼是加密後的亂碼了。problem原理須要瞭解…………

看了一下子文檔,概念掌握:

Service Container|Facades :dependency injections, Closure

Schema: http://www.golaravel.com/laravel/docs/5.0/schema/  Laravel的字段類型

Query Builder(retrieve join 


retireving hobbby用:

 PHP和MYSQL中的「逗號」

http://my.oschina.net/dongqiangV/blog/201549


數據遷移

php artisan make:migration create_users_table

結構生成器:

Schema::create('users', function (Blueprint $table) {
            $table->increments('id');
            $table->string('name');  //string至關於varchar
            $table->string('email')->unique();
            $table->string('password', 60);
            $table->char('gender', 2);
            $table->tinyInteger('age');
            $table->tinyInteger('marriage');
            $table->string('hobby');
            $table->boolean('public');
            $table->dateTime('last_login'); // DATETIME 類型,最近一次登陸
            $table->softDeletes(); //加入 deleted_at 字段於軟刪除使用
            $table->rememberToken();
             $table->timestamps();// DATETIME 註冊時間
        });

原本只用了timestamp(create_at),可是登陸的時候再connect.php找不到updated_at字段報錯……算了就用timestamps了。

數據填充

seeds下能夠向數據庫中插入數據,這裏用:

php artisan make:seeder UserTableSeeder

再seeds文件下能夠看到新建的seeder文件,先填充一個admin來登陸用,

DB::table('users')->insert([
            'name' => 'admin',
            'email' => 'admin'.'@admin.com',
            'password' => bcrypt('123456'),
            'gender' => '女',
            'age' => '21',
        ]);

發現直接存入年齡是很不合理的,因此想把age字段改成birthday,發現Laravel有修改字段的功能:

http://laravel-china.org/docs/5.0/schema

http://wenda.golaravel.com/question/386

然而仍是失敗了,在原來的migration文件上改應該不行,以php artisan migrate:refesh全部的數據表都不在了,我想應該要新建一個migration文件吧。無論了重建就行。

而後把age改成了dateTime類型,不過輸出的時候發現跟的有時分秒,看了之前的項目是在model中作了預約義。


2015/12/2

problem:修改mySQL數據類型

又是修改birth字段,發現應該直接用date數據類型而不該該用dateTime!

總算成功了一次:

php artisan make:migration user_birth_change --table=users

而後在新的遷移文件的up方法中加入mySQL語句:

 DB::statement("ALTER TABLE Users CHANGE birth birth date");

注意不能忘記down中alter回去。最後php artisan migrate就成功啦!

problem:user/profile與user/{id}衝突

Routes相關,

Route::get('user/profile','UserController@profile');

必須寫在

Route::get('/user/{id}','UserController@show');

前面,否則會把profile當作{id}一塊兒傳給UserController,哎。

開始作每一個用戶的message board

problem:建好model與controller後沒法識別表格 PDOException: Base table or view not found

在model中加入:| stackoverflow

public $table = "message";

把留言者的name和email使用input type=」hidden「傳入」,可是message表裏並無存入,而後看message模型,發現protected $fillable中沒有加入這些字段。


2015/12/3

修改table字段 

只知道author_id,沒有想到好的方法把author_name顯示到評論裏,因此只好用本辦法在message表中再添加一個author_name字段,又用的schema|結構生成器。

up方法:$table->string('author_name')->after('author_id');

down方法:$table->dropColomn('author_name');

昨天的談話讓我意識到session的重要性…………記錄下用法

use Session;
//存入session
Session::put('email', "$nowUser->email");
//取出session
session('email');

真正試過以後才以爲session真的很好用,以前總說http什麼stateless無狀態,也不算能很好的理解吧,看文檔說不一樣的session driver保存在不一樣的地方,加上cookie,session_id這些概念仍是有點暈。

JellyBool有個關於session的文章,之後沒事多看看:link

problem:marriage字段的數字顯示爲相應的中文意義。

關於數據庫操做,只知道$users=User::all();而後再return view('user.index',compact('users'));

可是沒有仔細想過怎麼回事,爲了處理marriage字段的數字因此請教了同事,善用var_dump……嗯嗯

而後發現all()返回的是一個對象集合,包含了全部user對象,compact函數能夠搜索變量名建立數組。

同事建議我寫一個方法判斷數字從而轉換爲中文字符,因而新建了一個public function marriagechange(){}

而後直接$users->marriagechange(),

FatalErrorException :Call to undefined method Illuminate\Database\Eloquent\Collection::marriagechange()

方法是這樣的:

 public function marriagechange($users)
    {
        foreach ($users as $user)
         {
            switch ($user->marriage) {
                case '0':
                   $user->marriage='未婚';
                    break;
                case '1':
                   $user->marriage='已婚';
                    break;
                case '2':
                   $user->marriage='離異';
                   break;
                case '3':
                   $user->marriage='喪偶';
                   break;
                default:
                   break;
            }   } }

又找上了萬能的stackoverflow:link

$users->marriagechange()

修改一下:

$this->marriagechange($users);

成功了,關於$this這個keyWord的概念,對我來講依然晦澀難懂,繼續在stackoverflow上查了一下,都在解釋JS裏的$(this),好比:

this is a reference to the DOM element of invocation. | link

能夠理解爲當前的instance麼?

因此表明着Object instance?

找到個解釋比較清晰的:link

Use $this to refer to the current object. Use self to refer to the current class. In other words, use $this->member for non-static members, use self::$member for static members.

作到用戶主頁的時候發現要顯示單個用戶信息並不能用這個方法,因此把foreach單獨用到index方法中,而後marriagechange就只剩switch判斷,單獨一個user object也能夠調用了: $this->marriagechange($user);

表單驗證 | form validation

太懶,最後纔來作表單驗證,連個request文件都懶得鍵呵呵,

在postRegister裏添加:

  $this->validate($request, [
        'name' => 'required|max:255|min:3',
        'email'=>'required|email|unique:users',
        'password'=>'required|alpha_num|between:6,12|confirmed',
        'password_confirmation'=>'required|alpha_num|between:6,12'
         ]);

繼續完善表單驗證,漢化驗證提示信息。link

  1. 修改config/app.php

  2. 'locale' => 'zh',時區也能夠修改成'PRC'。

  3. 在resources文件夾下新建zh文件,把en文件夾中的validation.php複製過來而後就能夠修改了~

而後是處理last_login字段,在postLogin方法裏:

 if (Auth::attempt($credentials, $request)) {

            $user = $request->user();
            $user['last_login']=Carbon::now();
            $user->update();
           return redirect('user');
       }else{

        return redirect('auth/login')->with('message','用戶或密碼錯誤');

       }

忽然以爲session的保存彷佛也應該放在這兒,以前放在user/index下的,每次請求這個界面都保存一次感受不怎麼好。

作留言板的時候但願實現最新的留言在最前面,還在憂心會不會很麻煩,結果Laravel有latest()這個方法……

 $message = Message::latest()->get();

這麼快就解決了……

JS邏輯 href="javascript:display()"

一點關於JS的邏輯,作了一個<a href="javascript:display()">來展開和隱藏元素。

可是每次刷新頁面後第一次須要click兩次才能展開,很苦惱。

後來發現是由於display存在三種狀況,「」「none」「block」。

function display(){ 
var obj=document.getElementById("loginList"); 

            if(obj.style.display=="" || obj.style.display=="none"){
		obj.style.display="block";
	    }else{
	         obj.style.display="none";} 
    }

還有就是window.onload=function(),頁面加載完的動做也能解決不少想要的效果。

在front end感受JS萬能~

to do TASK:

  1. profile表單驗證

  2. 用戶搜索

  3. 留言板界面,表情,時間幾天前

  4. 用戶頭像

  5. footer

判斷是否公開用戶信息(public)

problem:單選,接收不到類型爲radio的<input>傳的數值

深夜不得不記錄一下奇葩的事,input標籤的屬性,順序很重要嗎?

request一直收不到表單傳來的數據讓我很奇怪,而後把 type="radio" 放到 id="public" 後面就行了,很是沉醉……

判斷是否公開(public字段),原本是想寫一個方法的,可是不知道該怎麼用,

由於只知道能夠User::where('public'.'0');

2015/12/4 2:06

記念一下,竟然寫出來了!,$this最高!

  public function ispublic(){
    $users = User::where('public','0')->paginate(8);
    return $users;
   }

而後index裏調用:

  $users = $this->ispublic();

稍微有點理解到了$this的做用!由於$users沒有實例化前沒有辦法調用方法!

返回以前界面

  public function delete($mesid)
    {
        message::where('id',"$mesid")->delete();
       return Redirect::back();
    }

困擾了我很久的功能……記得 use Redirect;

相關文章
相關標籤/搜索