(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用:
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
只知道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. Useself
to refer to the current class. In other words, use$this->member
for non-static members, useself::$member
for static members.
作到用戶主頁的時候發現要顯示單個用戶信息並不能用這個方法,因此把foreach單獨用到index方法中,而後marriagechange就只剩switch判斷,單獨一個user object也能夠調用了: $this->marriagechange($user);
太懶,最後纔來作表單驗證,連個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
修改config/app.php
'locale' => 'zh',時區也能夠修改成'PRC'。
在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的邏輯,作了一個<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萬能~
profile表單驗證
用戶搜索
留言板界面,表情,時間幾天前
用戶頭像
footer
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;