小编Rob*_*bok的帖子

Laravel 5中的RESTful API响应

我正在使用Laravel构建RESTful API.我的API总是返回JSON.我想做的是将响应逻辑保持在一个地方.以下是我现在在API控制器中执行此操作的方法Route::controller().有趣且超有用的例子来了:

public function getDouble($number) {
    try {
        if (!is_numeric($number)) {
            throw new HttpException(400, 'Invalid number.');
        }

        $response = $number * 2;
        $status = 200;
    }
    catch (HttpException $exception) {
        $response = $exception->getMessage();
        $status   = $exception->getStatusCode();
    }

    return response()->json($response, $status);
}
Run Code Online (Sandbox Code Playgroud)

在此示例中,我的API路由将由/double/13GET方法访问.问题是我在每个方法中重复这个try ... catch块.我希望我的API方法如下:

public function getDouble($number) {
    if (!is_numeric($number)) {
        throw new HttpException(400, 'Invalid number.');
    }

    return $number;
}
Run Code Online (Sandbox Code Playgroud)

然后,捕获这些异常并在另一个地方形成JSON.在良好的应用程序架构方面,这里最好的方法是什么?

php rest http laravel laravel-5

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

Laravel 5中的API异常

我想Exception从我的一个控制器(或将来在几个控制器中)捕获所有普通的异常(类的实例)来统一它们的行为.我知道如何在Exceptions/Handler.php中为异常创建全局处理程序,但是如何将它们限制为某个特定的控制器呢?

我想要做的是在我的API控制器中抛出Exception时以JSON格式返回这样的数组:

[
    'error' => 'Internal error occurred.'
]
Run Code Online (Sandbox Code Playgroud)

我可能决定抛出自己的异常类,ApiException但我也希望提供第三方异常,例如数据库错误.

我应该直接将一些值传递给请求对象吗?如果是这样,怎么样?或许还有另一种方式?

php exception-handling exception laravel laravel-5

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

垂直对齐:文本节点居中

我正在尝试垂直对齐文本块。我有一个:before伪元素,我想要实现的是将两者对齐到中间。

\n\n

是否可以在没有额外包装的情况下实现它?我的问题是这样的:

\n\n

垂直对齐

\n\n

HTML:

\n\n
<div class="fail">Something\'s wrong</div>\n<div class="success">\n    <span>Perfect middle</span>\n</div>\n
Run Code Online (Sandbox Code Playgroud)\n\n

CSS 失败:

\n\n
.fail\n{\n    background: orange;\n    font-size: 30px;\n    display: inline-block;\n}\n\n.fail:before\n{\n    background: red;\n    content: \'\xe2\x9c\x97\';\n    text-align: center;\n    display: inline-block;\n    line-height: 60px;\n    margin-right: 10px;\n    vertical-align: middle;\n    width: 60px;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

CSS 成功:

\n\n
.success\n{\n    font-size: 30px;\n    background: lime;\n    display: inline-block;\n}\n\n.success:before\n{\n    background: green;\n    content: \'\xe2\x9c\x93\';\n    text-align: center;\n    display: inline-block;\n    line-height: 60px;\n    margin-right: 10px;\n    vertical-align: middle;\n    width: 60px;\n}\n\n.success span {\n    vertical-align: middle;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

从这张照片上可能不太明显,但左边那张太高了,大约有2-3个像素的差异。这对于较小的元素尤其重要。

\n\n

所以我的问题是:我可以只用一个 HTML 标签来实现完美的中间 + …

css vertical-alignment pseudo-element

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

Laravel 5 中的控制器命名约定

Laravel 5 中的所有控制器仍然以Controller后缀命名,例如AuthControllerPasswordController。是否有任何理由使用自己的控制器遵循此约定,或者这些后缀只是前命名空间时代的遗留物?

我大部分时间都使用基于操作的 URL 生成,因此我避免使用类似 的链接url('home'),但更喜欢类似的链接action('HomeController@index)。这样我就可以轻松地更改 URL 模式。

action('Home@index')要优雅得多。背后有什么陷阱吗?

php model-view-controller laravel laravel-5

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

Laravel 5和奇怪的虫子:背上的花括号

每当我在Laravel网站上回顾历史时,我看到的回答如下:

{}
Run Code Online (Sandbox Code Playgroud)

当我前往我之前的位置时,它也显示了那些括号.

如果我使用"禁用缓存"选项在Chrome中启动"开发人员工具",则不会出现此问 该Content-Type的精选返回什么确实application/json.在Firefox中没有这样的问题.

这是因为我的一个中间件.我编写了AjaxJson中间件来将所有Ajax请求转换为JSON响应.奇怪的是,当我回到历史时,谷歌Chrome会向Ajax发出此请求.它包含此标头:

X-Requested-With:XMLHttpRequest

因此$request->ajax()返回true.

这是我的中间件:

<?php

namespace App\Http\Middleware;

use Closure;
use Illuminate\Http\Response;

class AjaxJson
{
    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        $response = $next($request);

        if (!$request->ajax()) {
            return $response;
        }

        if (!$response instanceof Response) {
            return $response;
        }

        return response()->json($response->getOriginalContent(), $response->status());
    }
}
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?


UPDATE

我发现了响应头的no-storeCache-Control …

php ajax json laravel-5

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

Swift 3.1中#function文字的怪异值

我发现Swift 3.1中String#function文字返回的内容很奇怪。这里:

class FunctionLiteralTest {
    func weirdo() -> String {
        return #function
    }

    func weirdo(parameter: Int) -> String {
        return #function
    }

    func weirdo(_ parameter: Int) -> String {
        return #function
    }

    func weirdo(_ parameter: Int, _ anotherParameter: Int) -> String {
        return #function
    }
}

let functionLiteralTest = FunctionLiteralTest()

functionLiteralTest.weirdo()             // returns "weirdo()"
functionLiteralTest.weirdo(parameter: 1) // returns "weirdo(parameter:)"
functionLiteralTest.weirdo(1)            // returns "weirdo"
functionLiteralTest.weirdo(1, 2)         // returns "weirdo"
Run Code Online (Sandbox Code Playgroud)

当未标记所有参数时,将完全跳过括号。我很明白,如果#function返回的函数名也没有括号,也就没有任何参数。

那是合理的行为还是错误?

function swift

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

为什么我不能 git pull 进行不相关的本地更改?

git pull在git中,如果有任何未提交的修改则无法执行,出现以下错误:

错误:无法使用变基拉取:您有未暂存的更改。

错误:请提交或隐藏它们。

但它适用于未跟踪的文件。我发现这非常烦人,git stash每次我想要拉取时都需要这样做,即使我的更改与拉取的文件无关。

如果我的更改与拉取的更改不冲突,是否有任何解决方法允许拉取?我真的不明白为什么如果拉力不会破坏任何东西它就不起作用。如果这是一个安全问题,那么为什么它适用于新文件?理论上,拉取可以引入相同路径的新文件。

有什么解决方案可以让它变得更容易吗?

git git-pull

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

是否可以获取函数的静态值?

我从未意识到PHP中的函数可以具有自己的静态变量,如下所示:

function example() {
    static $heavy;

    if ($heavy === null) {
        $heavy = new HeavyClass();
    }

    return $heavy->doSomething();
}
Run Code Online (Sandbox Code Playgroud)

我的问题是,是否可以从外部访问此静态值?诸如之类的东西example::$heavy显然不起作用。

php

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

为什么 Vue.js 允许推送到 prop 数组?

当我们尝试直接更改 prop 值时,Vue.js 会显示警告,如下所示:

Vue.component('Games', {
    template: `
        <div>
            <ol>
                <li v-for="game in games">{{ game }}</li>
            </ol>
            <button @click="clear">Clear games</button>
        </div>
    `,
    props: ['games'],
    methods: {
        clear: function () {
            this.games = [];
        }
    }
});
Run Code Online (Sandbox Code Playgroud)

显示的警告是:

避免直接改变 prop,因为每当父组件重新渲染时,值都会被覆盖。相反,根据道具的值使用数据或计算属性。

我知道为什么会发生这种情况,但令我惊讶的是它不会发生在.push(). 如果我更改方法以向数组添加值而不是重写它,则不会发出警告:

methods: {
    add: function () {
        this.games.push('Whatever');
    }
}
Run Code Online (Sandbox Code Playgroud)

为什么没有警告?如何直接推送到道具很好而重写不是?

javascript vue.js

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

i18next 插值中的 React 组件显示为 [object Object]

我的 React 应用程序使用next-i18nextpackage.json。我想在我的插值中放入一些 React 组件:

import React from 'react';
import { useTranslation } from 'next-i18next';
import { serverSideTranslations } from 'next-i18next/serverSideTranslations';

export default function Review({ text, author }) {
  const { t } = useTranslation('reviews');

  return (
    <article>
      <p>{text}</p>
      <footer>
        {t('footer', { author: <a href={author.url}>{author.name}</a> })}
      </footer>
    </article>
  );
}

export const getStaticProps = async ({ locale }) => ({
  props: {
    ...await serverSideTranslations(locale, ['reviews']),
  }
});
Run Code Online (Sandbox Code Playgroud)

reviews.json

import React from 'react';
import { useTranslation } …
Run Code Online (Sandbox Code Playgroud)

javascript i18next reactjs react-i18next next-i18next

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