小编Ste*_*man的帖子

不使用Artisan的维护模式?

我只是想知道是否有人知道如果有一种方法可以在laravel网站上激活维护模式而不使用Artisan?我没有对服务器的命令行访问权限,所以我不能在没有先在本地站点上更新它然后将更改推送到服务器的情况下使用Artisan.是否可以添加一个主路由,拒绝访问任何其他路由?

谢谢!

laravel laravel-4 laravel-5

29
推荐指数
5
解决办法
2万
查看次数

仅在显示内容时显示插槽

有没有办法只显示一个插槽,如果它有任何内容?

例如,我正在构建一个简单的Card.vue组件,如果页脚槽有内容,我只想显示页脚:

模板:

<template>

    <div class="panel" :class="panelType">

        <div class="panel-heading">
            <h3 class="panel-title">
                <slot name="title">
                    Default Title
                </slot>
            </h3>
        </div>

        <div class="panel-body">
            <slot name="body"></slot>

            <p class="category">
                <slot name="category"></slot>
            </p>
        </div>

        <div class="panel-footer" v-if="hasFooterSlot">
            <slot name="footer"></slot>
        </div>

    </div>

</template>
Run Code Online (Sandbox Code Playgroud)

脚本:

<script>
    export default {
        props: {
            active: true,
            type: {
                type: String,
                default: 'default',
            },
        },

        computed: {
            panelType() {
                return `panel-${this.type}`;
            },

            hasFooterSlot() {
                return this.$slots['footer']
            }
        }
    }
</script>
Run Code Online (Sandbox Code Playgroud)

在视图中:

<card type="success"></card>
Run Code Online (Sandbox Code Playgroud)

由于上面的组件不包含页脚,因此不应该呈现,但它是.

我尝试过使用this.$slots['footer'],但这会返回undefined.

有人有任何提示吗?

vue.js vuejs2

25
推荐指数
7
解决办法
1万
查看次数

Laravel针对大型网站的本地化

是否有更好的方法可以存储大量文本以便在laravel中进行本地化?如果我的整个页面只是纯文本很容易,但我的几个页面都有复杂的布局,我需要添加多个字符串来围绕内容,如图像/链接/媒体.

如果我需要使用斜体/粗体或为文本执行任何类型的HTML以及我需要将它们分成几部分以便能够做到这一点,这是一种痛苦.

我正在使用的一个例子:

return array(
    'exchange_rate' => array(
        'title' => 'Exchange Rate',
        'p1' => 'Disclaimer', 
        'p2' => 'Currency rate displayed is subject to change.',
        'p3' => 'View All Rates to Date'
    ),
Run Code Online (Sandbox Code Playgroud)

第一个数组是页面,第二个是页面的内容.为了更复杂的布局,我经常需要更深入地使用多个数组,例如:

return array(
'exchange_rate' => array(
    'title' => 'Exchange Rate',
    'p1' => 'Disclaimer', 
    'p2' => 'Currency rate displayed is subject to change.',
    'p3' => 'View All Rates to Date',
    'table1' => array(
        'title' => 'Currency Table',
        'row1' => array(
           'l1' => 'Current Rate'
        ),
        'row2' => array('etc')
    ) …
Run Code Online (Sandbox Code Playgroud)

laravel laravel-4

15
推荐指数
2
解决办法
1万
查看次数

在VueJs中使用Laravel的Gate/Authorization

我不确定以前没有处理过这个问题,但是如何在Vue模板中使用VueJs和授权操作呢?

如果我正在使用Laravel的刀片,这很容易(使用@can指令),但是在Google上搜索了几个小时之后,没有任何文档或任何方法可以在Vue中执行此操作.

现在,我知道我可以简单地将用户权限加载到视图中的数组/ JSON对象中,但似乎无法使用Laravel的门方法在Vue模板中显示/隐藏操作,以确定是否允许用户执行对特定记录采取行动.

例如,有一个评论列表,但用户必须拥有评论才能看到"编辑"按钮.

问题是,如果我在Vue中实现逻辑,我将在整个后端和前端复制授权逻辑.

使用Laravel的策略,我能够执行特定操作的复杂授权.但我很难过如何在Vue中实施该政策.

还有更复杂的场景,例如,如果有admin角色的用户正在浏览评论,即使他们不拥有评论,他们也应该能够编辑它.

有没有人对这种情况有任何建议?

编辑:

现在我可以为我的模型添加属性访问器,例如:

模型:

class Comment extends Model
{
    protected $appends = ['can_update'];

    public function getCanUpdateAttribute()
    {
        return Gate::allows('update', $this);
    }
}
Run Code Online (Sandbox Code Playgroud)

VUE:

<button v-if="comment.can_update">Edit</button>
Run Code Online (Sandbox Code Playgroud)

但这似乎我再次复制了我的政策中已经存在的逻辑.

laravel vue.js laravel-5 vuejs2 laravel-5.4

9
推荐指数
2
解决办法
3481
查看次数

Laravel `.env`,系统级和服务器级环境变量

Laravel 5 我对文档中的以下句子有点困惑:

.env 文件中的任何变量都可以被外部环境变量(例如服务器级或系统级环境变量)覆盖。

它看起来像我想做的,即从服务器级环境变量设置一些 .env 变量,但我找不到任何有关如何执行此操作的参考。

看起来这样的配置背后存在一些安全问题,但是下面的stackoverflow答案并没有评论这句话。

我还倾向于认为,如果在文件中使用对环境变量的引用.env,则恰恰是为了删除机密信息,因此我不再看到安全问题。

我的结论是我误解了这句话,但我很乐意理解为什么,或者,如果碰巧有可能的话,知道如何做到这一点。谢谢。

php configuration environment-variables production-environment laravel-5

6
推荐指数
1
解决办法
3470
查看次数

扩展Laravel Eloquent\Collection类

我知道Eloquent\Collection可以使用以下方法在模型中覆盖默认类:

public function newCollection(array $models = array()) {

    return new CustomCollection($models);
}
Run Code Online (Sandbox Code Playgroud)

如果我使用典型的查询,例如:

Model::where('name', $name)->get();
Run Code Online (Sandbox Code Playgroud)

这很棒,所以我可以在eloquent集合类中添加方法,例如:

$records = Model::where('name', $name)->get();

$records->toTable();
Run Code Online (Sandbox Code Playgroud)

但是如果我在模型上使用分页,例如:

Model::where('name', $name)->paginate(25);
Run Code Online (Sandbox Code Playgroud)

它返回类的实例Illuminate\Support\Collection而不是Illuminate\Database\Eloquent\Collection.

有没有一种方法可以覆盖或扩展典型的Illuminate\Support\Collection

我正在尝试为toTable()返回的Collection 添加一个方法.我宁愿不用自己的替换分页服务提供程序.

谢谢!!

laravel laravel-4

5
推荐指数
1
解决办法
1373
查看次数

在WYSIWYG中纯化后呈现脚本标签

我在使用HTMLPurifier php库时遇到问题.我正在为我的应用程序中的所有文本区域使用名为"Summernote"的WYSIWYG编辑器.

在sommernote里面写一些东西时:

<script>alert('test');</script>

帖子数据来自

<p>&lt;script&gt;alert('test');&lt;/script&gt;</p>

但是,一旦通过HTMLPurifier运行,它就不会删除转换为常规字符的脚本标记.因此,当我在summernote中编辑此文本时,它实际上运行脚本!

这是处理编辑器的内容的图像:

HTML Purifier问题

以下是它如何存储在数据库中:

HTML Purifier问题 -  2

如果有人有任何想法,请告诉我!

编辑:另外,如果我禁用Summernote WYSIWYG编辑器,则在使用HTMLPurifier进行清理时,会从textarea中成功删除标记.

sanitization htmlpurifier laravel

1
推荐指数
1
解决办法
2274
查看次数