1、修改login成功后的跳转路径
修改App\Http\Controllers\Auth\LoginController中的属性值$redirectTo。
//Laravel 5.6
protected $redirectTo = 'new url';
变更
register的话修改App\Http\Controllers\Auth\RegisterController中的属性值$redirectTo
2、修改身份验证成功后,页面输入/login /register后跳转的路径
修改App\Http\Middleware\RedirectIfAuthenticated中的handle方法。
//修改 `redirect` 中的 url
public function handle($request, Closure $next, $guard = null)
{
if (Auth::guard($guard)->check()) {
return redirect('new url');
}
return $next($request);
}
3、设置执行时间上限为300秒,默认是30秒
也可以直接修改
php.ini中的配置项max_execution_time = 300 #default 30
ini_set('max_execution_time', 300);
4、手动更新 autoloader
打印自动加载索引 dump-autoload
composer dump-autoload
5、Laravel5.3+的Controllers:Session In The Constructor
-
5.3及之后的
Laravel版本的Controllers的construct不能再获取的到session值以及当前登录(认证通过)的用户信息
protected $projects;
public function __construct()
{
//will always get `null`
$this->projects = Auth::user()->projects;
}
6、三元运算符?:及??
-
??: 如果变量存在且值不为NULL, 它就会返回自身的值,否则返回它的第二个操作数。 -
?:: 自PHP 5.3起,可以省略三元运算符中间那部分。表达式expr1 ?: expr3在expr1求值为TRUE时返回expr1,否则返回expr3
$item1 = 0;
$item2 = null;
echo $item1 ?: 'Y';// Y
echo $item1 ?? 'Y';// 0
echo $item2 ?: 'Y';// Y
echo $item2 ?? 'Y';// Y
7、Eloquent: get() or first()
updated_at:20180803:first()返回Eloquent\Modal类实例,get()返回的是Illuminate\Database\Eloquent\Collection集合 如果查询结果需要empty()判断,则使用first(),使用get()即使查询不出结果也会返回一个空的collection的
//if we can't find $name in Member
$member = Member::whereName($name)->first();
//OK
if (empty($member)) {
return $this->jsonResult(40506);
}
//always false
$member = Member::whereName($name)->get();
dd(empty($member));//false
8、创建外键失败
遇到问题记录:使用
Laravel的php artisan make:migration中代码如下
public function up()
{
Schema::create('wk_collections', function (Blueprint $table) {
$table->increments('id');
$table->integer('member_id')->comment('用户ID');
$table->integer('project_id')->comment('项目ID');
$table->bigInteger('document_id')->comment('文档ID');
$table->timestamps();
//unique index
$table->unique(['member_id', 'project_id', 'document_id']);
//外键约束
$table->foreign('member_id')
->references('id')->on('users')
->onDelete('cascade');
$table->foreign('project_id')
->references('project_id')->on('wk_project')
->onDelete('cascade');
$table->foreign('document_id')
->references('doc_id')->on('wk_document')
->onDelete('cascade');
});
}
上面的代码运行
php artisan migrate会报错误,具体错误在MySQL中运行SHOW ENGINE INNODB STATUS;然后将错误拷贝出来,查看LATEST FOREIGN KEY ERROR这一段
2018-05-01 09:51:03 0x2eec Error in foreign key constraint of table populac/#sql-148c_9:
FOREIGN KEY (`member_id`) REFERENCES `populac`.`users` (`id`):
Cannot find an index in the referenced table where the
referenced columns appear as the first columns, or column types
in the table and the referenced table do not match for constraint.
Note that the internal storage type of ENUM and SET changed in
tables created with >= InnoDB-4.1.12, and such columns in old tables
cannot be referenced by such columns in new tables.
Please refer to http://dev.mysql.com/doc/refman/8.0/en/innodb-foreign-key-constraints.html for correct foreign key definition.
谷歌一下,发现错误应该是migration:$table->integer('member_id')->comment('用户ID');默认建立的字段member_id int(11),而users::id int(10),MySQL外键和关联表的字段长度需要严格一致
- 参考博客 解决方式:
...
//原代码
$table->integer('member_id')->comment('用户ID');
//修改成
$table->addColumn('integer', 'member_id', ['unsigned' => true, 'length' => 10])->comment('用户ID');
//或者
$table->integer('member_id')->unsigned()->comment('用户ID');
...
9、使用 Editor.md 上传图片/文件如何处理
Editor.md- 修改
editor.md/plugins/image-dialog/image-dialog.js及editor.md/plugins/file-dialog/file-dialog.js
if (settings.crossDomainUpload)
{
action += "&callback=" + settings.uploadCallbackURL + "&dialog_id=editormd-file-dialog-" + guid;
}
//add csrf-token here
var csrfToken = $('meta[name="csrf-token"]').attr('content');
var csrfField = "";
if (csrfToken) {
csrfField = "<input type='hidden' name='_token' value='" + csrfToken + "' />";
}
//add csrf below
var dialogContent = ( (settings.fileUpload) ? "<form action=\"" + action +"\" target=\"" + iframeName + "\" method=\"post\" enctype=\"multipart/form-data\" class=\"" + classPrefix + "form\">" : "<div class=\"" + classPrefix + "form\">" ) +
( (settings.fileUpload) ? "<iframe name=\"" + iframeName + "\" id=\"" + iframeName + "\" guid=\"" + guid + "\"></iframe>" : "" ) +
"<label>" + fileLang.url + "</label>" +
"<input type=\"text\" data-url />" + (function(){
return (settings.fileUpload) ? "<div class=\"" + classPrefix + "file-input\">" + csrfField +
"<input type=\"file\" name=\"" + classPrefix + "file-file\" />" +
"<input type=\"submit\" value=\"" + fileLang.uploadButton + "\" />" +
"</div>" : "";
})() +
"<br/>" +
"<label>" + fileLang.alt + "</label>" +
"<input type=\"text\" value=\"" + selection + "\" data-alt />" +
"<br/>" +
"<input type='hidden' data-icon>"+
( (settings.fileUpload) ? "</form>" : "</div>");
- 文件头的
meta加上<meta name="csrf-token" content="{{ csrf_token() }}">