为什么80%的码农都做不了架构师?>>>   

环境准备以及laravel安装

(Laravel 安装指南)

composer create-project laravel/laravel snsTest

problem:下载下来的laravel无法启动服务器,会报错。

之前看的教程似乎还要改些什么,嫌麻烦用的在LaraBase上介绍过的一键安装包: http://www.golaravel.com/download/

php artisan serve启用的是8000端口,这里换个8888启动服务器,设置:

php -s localhost:8888 -t public

登录界面准备以及数据库建表

新建了一个Sites controller

php artisan make:controller Sitescontroller

在新建的controller里注册login方法:

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

在Views视图文件夹下新建sites/login.blade.php。

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

数据库建表:users.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.οnlοad=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;

转载于:https://my.oschina.net/sikou/blog/536046

【log】12/11 checking project:(Laravel)snsTest相关推荐

  1. win10防火墙删除的文件在哪里_【微软】第42期分享:微软 Win10 仍存在删除个人配置文件数据 Bug!...

    第42期分享 微软! 根据Windows Latest报道,一些安装了Windows 10最新更新(包括KB4549951)的用户报告称,他们的用户配置文件以及所有数据,自定义选项和文档在登录时均未加 ...

  2. win10休眠_【电脑】第28期分享:Win10 系统 C 盘飘红,这4招瞬间解决!

    电脑就变得异常卡顿,一番检查下来,原来是C盘飘红了!通常遇到这种情况时,很多小伙伴都是第一时间去下载各种清理软件,除此之外,还有哪些正确的解决办法呢? 第28期分享 C盘飘红! 1. 清理Window ...

  3. celeron处理器_【微软】第39期分享:微软公布Win10 v2004正式版支持处理器!

    第39期分享 支持处理器! 今天,微软透露了更多2020年首个Windows 10(v2004)重要更新版本的细节,其将不再向OEM厂商和开发者提供32位版本的操作系统,新的个人电脑也将不再预装来自O ...

  4. 6月12日云栖精选夜读:【干货】iOS 11 短信拦截功能初探

    在iOS 11 beta 1出来以后,我们发现新增了SMS fraud extension(恶意短信拦截插件),该插件在经过用户的授权后可以用于拦截用户的恶意短信. 热点热议 [干货]iOS 11 短 ...

  5. 计算机科学技术学报官网convex,【喜报】计算机领域TOP1000期刊:JAS居世界前12%、中国第1...

    原标题:[喜报]计算机领域TOP1000期刊:JAS居世界前12%.中国第1 CAA 智慧起航,共创未来 近日,Guide2Research发布了2021年TOP 1000计算机科学与电子领域全球顶尖 ...

  6. 【C++】C++11 STL算法(九):番外篇

    1.如果获取指针或迭代器指向的类型 详见:C 11:如何获取一个指针或迭代器指向的类型? decltype(*std::declval<Pointer>()) decltype:c++11 ...

  7. 【02】2022.11最新超详细Vuforia图片识别教程

    [02]2022.11最新超详细Vuforia图片识别教程 文章目录 [02]2022.11最新超详细Vuforia图片识别教程 1.Vuforia环境搭建 2.License Key获取及注册 3. ...

  8. 【前端】Vue+Element UI案例:通用后台管理系统-代码总结(已开源)

    文章目录 前言 项目文件目录 api mockServe home.js permission.js index.js mock.js user.js assert components Common ...

  9. 【AngularJS】—— 12 独立作用域

    独立作用域的作用 为了便于理解,先看一下下面这个例子: <!doctype html> <html ng-app="myApp"><head>& ...

最新文章

  1. 点击TableView任一行跳转详情页面会跳转两次的解决办法
  2. python插件做nagios发报警邮件二
  3. 6 种不同情况下写的代码
  4. Nginx Install 记录
  5. android开发 eclipse alt+”/”自动提示失效
  6. c# json使用集
  7. 报错:不是可以识别的内置函数名称
  8. NAND FLASH分区规划
  9. jdk11 javafx_JDK 11上的JavaFX
  10. python编写网页游戏脚本_[大数据]用Python脚本做一些网页游戏中力所能及的自动化任务 - 码姐姐找文...
  11. linux怎么使用西部数据,「轉」Linux下西部数据C1门解决方法
  12. PYTHON对接验证码短信接口DEMO示例
  13. LM3478 LTspice仿真模型
  14. dnfdpl服务器维护了,梦想开始的地方丨山东沙排女将王鑫鑫奥运首秀止步八强 怕影响训练父母没来济南探望过...
  15. 【服务器】 Windows Server 2008 R2 配置HTTPS TLS1.2
  16. 说一说设备综合效率OEE
  17. iOS - 选取相册中iCloud云上图片和视频的处理
  18. Android沙箱自动化安全产品
  19. Python之高阶函数(abs、map、reduce、filter、lambda匿名函数)
  20. 用apline-linux创建的tomcat容器中查看catalina.out日志中文乱码问题解决

热门文章

  1. s5 android5.0内存泄漏,android-最初从位图泄漏了未引用的byte [],但被回收的()导致内存泄漏(直到活动停止)...
  2. 第十七届全国大学生智能车竞赛航天智慧物流创意组-第二次线上技术培训
  3. 正值实系数多项式函数所对应的导数累加和是否非负?
  4. 2021年春季学期-信号与系统-第二次作业参考答案-第八小题
  5. 2021春季学期-创新设计与实践-课程结构设计
  6. 一种互补间歇振荡器工作电压
  7. 315MHz 高频射频发射模块
  8. linux环境变量恢复,linux环境变量设置错误后的恢复方法(转)
  9. 开发音频频谱_ToneBoosters音频效果器插件合集
  10. python模拟内置函数reversed_Python内置函数reversed