在我的应用程序中,我需要检索过去 7 天内注册的用户。后来我意识到我还需要检查30天和365天等等。所以我在我的 User.php 中写了一个查询范围:
public function scopeCreatedWithinDays($query,$day){
$str = $day.' days ago';
$carbon = new Carbon($str);
$query->where('created_at', '>=', $carbon);
}
Run Code Online (Sandbox Code Playgroud)
我突然意识到,这种方法非常适合在所有模型中重复使用。所以我需要在一个共同的地方定义这个方法,这样我就可以x通过简单地调用$anyModel->createdWithinDays(30). 但我不知道把它放在哪里以及如何...
我很难理解 laravel 中日期字段的内部工作原理。我有一个名为的自定义日期字段called_at,我在架构中将其设置为可为空。由于它是一个日期字段,我自然希望它是一个 Carbon 实例,因此在模型中我将此属性推送到$dates数组。
protected $dates = ['called_at'];
Run Code Online (Sandbox Code Playgroud)
为了能够通过request('called_at')输入从控制器设置它,我必须在模型中设置一个增变器。所以我设置了一个这样的:
public function setCalledAtAttribute($date){
$this->attributes['called_at'] = Carbon::parse($date);
}
Run Code Online (Sandbox Code Playgroud)
但问题是,即使用户在输入字段中没有提供日期,该called_at属性也会设置为当前时间戳!但我希望它是 NULL。
为了摆脱它,我注释掉了setCalledAtAttributemutator。但现在它甚至不会接受输入:
InvalidArgumentException 数据丢失
最重要的是,如何将我的日期字段设置为可空,以便当用户将输入字段留空时,该called_at字段不会被设置为当前时间戳?
我正在使用vuetify.js并尝试创建一个可以在整个应用程序中重用的组件.虽然它的工作绝对正常,但我不确定它是否是正确的方法.
我正在创建一个导航抽屉组件,它始终具有相同的菜单选项,但可以从UI元素打开.
下面是代码.
// NavigationBar.vue
<template>
<v-navigation-drawer
temporary
v-model="drawerFlag"
light
overflow
fixed
>
<v-list>
<v-list-tile>
<v-list-tile-action @click.stop="toggleDrawer()">
<v-btn icon>
<v-icon>close</v-icon>
</v-btn>
</v-list-tile-action>
</v-list-tile>
</v-list>
<v-list class="pt-0">
<template v-for="item in items">
<v-list-tile :key="item.title" :to="item.link">
<v-list-tile-action>
<v-icon>{{ item.icon }}</v-icon>
</v-list-tile-action>
<v-list-tile-content>
<v-list-tile-title>{{ item.title }}</v-list-tile-title>
</v-list-tile-content>
</v-list-tile>
<v-divider></v-divider>
</template>
</v-list>
</v-navigation-drawer>
</template>
<script>
export default {
props: ['drawer'],
data() {
return {
items: [
{ title: 'Home', icon: 'home', link: '/home'},
{ title: 'History', icon: 'history', link: '/history' },
{ title: 'Wallet', icon: …Run Code Online (Sandbox Code Playgroud) 我在Vue中实现动态模态组件时遇到问题.
我显示从db获取的一组数据的常用方法是通过迭代db结果的每一行来转储HTML表元素中的每一行.像这样的东西:
正如您在屏幕截图中看到的,每个行都有一个或多个按钮,这些按钮由循环动态生成.为了将模态组件绑定到每个按钮(比如这个场景中的Remove按钮),我会做这样的事情.
HTML:
<div id="app">
<?php foreach($result as $x): ?>
<modal v-if="showModal">I am Modal $x</modal>
<btn @trigger="onShowModal">Button $x</btn>
<?php endforeach; ?>
</div>
Run Code Online (Sandbox Code Playgroud)
因此,如果我的结果中有三行,前面提到的代码块将采用以下形式:
<div id="app">
<modal v-if="showModal">I am Modal 1</modal>
<btn @trigger="onShowModal">Button 1</btn>
<modal v-if="showModal">I am Modal 2</modal>
<btn @trigger="onShowModal">Button 2</btn>
<modal v-if="showModal">I am Modal 3</modal>
<btn @trigger="onShowModal">Button 3</btn>
</div>
Run Code Online (Sandbox Code Playgroud)
这是我在JavaScript端做的事情:
JavaScript的:
Vue.component('btn',{
template: `<button @click="$emit('trigger')"><slot></slot></button>`,
});
Vue.component('modal',{
template: `<p><slot></slot></p>`,
});
new Vue({
el: '#app',
data: {
showModal: false
},
methods: {
onShowModal(){
this.showModal = true;
}
}
}); …Run Code Online (Sandbox Code Playgroud) 目前我正在将window.innerWidth值存储到一个名为的 vuex getter 中screenWidth,并在我的所有组件中使用它。但问题是每次我想使用它时,我都必须 1) import { mapGetters } from 'vuex'2)...mapGetters()在计算属性内调用。为了摆脱这个问题,我认为原型注入可能是一个好主意。所以我这样做了:
Vue.prototype.$screenWidth = window.innerWidth;
window.addEventListener('resize', () => {
Vue.prototype.$screenWidth = window.innerWidth;
});
Run Code Online (Sandbox Code Playgroud)
但这是行不通的。如何在不执行所有导入/映射内容的情况下更轻松地访问组件中的屏幕宽度?
我已经在实时服务器上成功部署了第一个laravel应用程序。除了我无法显示正在上传到/myproject_src/storage/app/public/myfolder1文件夹中的图像外,其他一切看起来都很不错
。
这是我在HostGator上的文件夹层次结构:
/ myproject_src /
这是所有laravel源文件(公用文件夹除外)
/public_html/mydomain.com/
这是我在公共目录中的所有内容
我以以下方式将文件路径存储到数据库中:
public/myfolder1/FxEj1V1neYrc7CVUYjlcYZCUf4YnC84Z3cwaMjVX.png
此路径与已上传到storage / app / public / myfolder1 /此文件夹的图像关联,并且是通过store('public/myfolder1');laravel方法生成 的。
我应该怎么做才能在img标签中正确显示图像:
<img src="{{ how to point to the uploaded image here }}">
Run Code Online (Sandbox Code Playgroud) 我有一个<btn>由以下模板组成的组件:
<button @click="$emit('trigger')">
</button>
Run Code Online (Sandbox Code Playgroud)
我在表单中使用该组件,如下所示:
<btn>Submit</btn>
Run Code Online (Sandbox Code Playgroud)
现在有些情况我需要在表单中有两个按钮。其中一个提交了表格,另一个则没有。但因为他们都在我的表单内,所以他们都提交了表单。我不能做这样的事情:
<btn>Submit</btn> <!-- This button should submit the form -->
<btn @trigger="nextQuiz">Next</btn> <!-- This button should only execute the nextQuiz method -->
Run Code Online (Sandbox Code Playgroud)
<btn>我如何告诉 vue 仅在单击第二个时才阻止表单提交?
我正在尝试laravel在A2Hosting共享主机上部署应用程序。我的文档根目录是:/ public_html目录。我将laravel应用程序中除公用文件夹以外的所有内容都上传到了托管的/ beta目录。
然后,我将所有内容从公共目录上传到/ public_html目录。
在index.php文件中,更改了以下两行:
require __DIR__.'/../beta/vendor/autoload.php';
$app = require_once __DIR__.'/../beta/bootstrap/app.php';
Run Code Online (Sandbox Code Playgroud)
现在,我只能正确看到应用程序的主页。也就是mydomain.com。mydomain.com后跟的任何超链接都显示404消息。在我的视图文件中,这就是我所指的路径:
<a href="/login">Login</a>
Run Code Online (Sandbox Code Playgroud)
但是在部署应用程序之后,每当我点击该链接(即mydomain.com/login)时,都会收到404 Not Found: The resource requested could not be found on this server!消息。我试图改变/login到login的<a>标签。结果相同。我该如何解决?
这听起来像是一种反模式或薄弱的系统设计,但我的应用程序的客户端要求可以有多个用户使用相同的电子邮件地址。
所以我username在用户表中添加了另一个唯一的列,并->unique()从email列中删除了约束。
注册,登录工作正常,但在密码重置期间出现问题。
考虑以下场景:
用户名 - johndoe,电子邮件 - john@example.com
用户名 - janedoe,电子邮件 - john@example.com
用户名 - jimmydoe,电子邮件 - john@example.com
如果他们中的任何一个请求密码重置链接,他们将不得不使用 johndoe@example.com 作为他们的电子邮件。那么当他们点击邮件中的重置链接时,哪个用户的密码实际上会被重置?原来,第一个用户,在本例中,是 johndoe。即使请求是由 janedoe 或 jimmydoe 提出的。
那么如何为单个用户名而不是电子邮件重置密码?我应该在 ForgotPasswordController 和/或 ResetPasswordController 控制器中进行哪些更改来解决这个问题?或者,我是否必须在核心框架中进行更改?如果是这样,在哪里以及如何?
我的Laravel应用程序有一个排队的事件侦听器,我还设置了cronjob以使其schedule:run每分钟运行一次。
但是我不知道如何php artisan queue:worker在后台持久运行命令。我在最受好评的方法中找到了该线程:
$schedule->command('queue:work --daemon')->everyMinute()->withoutOverlapping();
Run Code Online (Sandbox Code Playgroud)
但是,在另一个线程上,有些人抱怨上述命令创建了多个队列工作器。
如何安全地运行队列工作器?
laravel ×6
javascript ×4
php ×4
vue.js ×4
vuejs2 ×2
blade ×1
code-reuse ×1
cron ×1
eloquent ×1
laravel-5 ×1
oop ×1
traits ×1
vuetify.js ×1