博客文章
最近发表的话题
最近发表的评论
  • 请教一个关于中间件的问题 at 4周前

    @早起的虫子 controller 构造函数会先于路由 middleware 执行,因为 laravel 需要先获取 controllerMiddleware 然后和 路由 middleware 合并

  • 请教一个关于中间件的问题 at 4周前

    因为 laravel 获取路由 middleware 的时候会同时获取 controllerMiddleware 然后合并,这里获取 controllerMiddleware 时需要实例化 controller,所以会造成 controller 构造函数会先于路由 middleware 执行

  • 老师,请问 Laravel-china 的 Markdown 的方案是用的哪个啊?我觉得还挺好看的 at 4周前

    编辑器:SimpleMDE
    解析器:erusev/parsedownlaravel 自带)
    代码高亮:prismjs,主题:okaidia

    我之前做了个 blog 也是用的这个方案,有兴趣可以去看一下

  • 请问 DingoApi 的 Transformer 怎么返回自定义状态码?比如我要在 Transformer 中添加一个 status_code at 4周前
    • 可以通过 setMeta 来实现
    return $this->response->item($this->user(),new UserTransformer)->setMeta(['status_code' => 200]);
    • 你还可以配合自定义 serializer 来调整响应结构

    新建 app/Serializers/DataSerializer.php 文件

    <?php
    
    namespace App\Serializers;
    
    use League\Fractal\Serializer\ArraySerializer;
    use League\Fractal\Pagination\PaginatorInterface;
    
    class DataSerializer extends ArraySerializer
    {
    
        public function collection($resourceKey, array $data)
        {
            return compact('data');
        }
    
        public function item($resourceKey, array $data)
        {
            return compact('data');
        }
    
        public function meta(array $meta)
        {
            return $meta;
        }
    
        public function paginator(PaginatorInterface $paginator)
        {
            $pagination = [
                'total' => (int)$paginator->getTotal(),
                'current' => (int)$paginator->getCurrentPage(),
                'pageSize' => (int)$paginator->getPerPage(),
            ];
    
            return compact('pagination');
        }
    
        public function mergeIncludes($transformedData, $includedData)
        {
            if (!$this->sideloadIncludes()) {
                foreach ($includedData as $identifier => $data) {
                    $key = snake_case($identifier);
                    $includedData[$key] = current($data);
                    if ($key != $identifier) {
                        unset($includedData[$identifier]);
                    }
                }
                $transformedData = array_merge($transformedData, $includedData);
            }
            return $transformedData;
        }
    
    }

    然后编辑 app/Providers/AppServiceProvider.php 文件

    ...
    public function boot()
    {
        $this->app->make(\Dingo\Api\Transformer\Factory::class)
            ->setAdapter(function () {
                return new \Dingo\Api\Transformer\Adapter\Fractal((new \League\Fractal\Manager)->setSerializer(new \App\Serializers\DataSerializer));
            });
    }
    • 如果你是想将http状态码转换为 status_code 响应,那么你可以通过中间件来实现
    public function handle(Request $request, Closure $next)
    {
        try {
            $response = $next($request);
            if ($response instanceof \Illuminate\Http\Response) {
                if ($response->exception instanceof \Exception) {
                    throw $response->exception;
                }
    
                $content = $response->getOriginalContent();
    
                if (is_array($content)) {
                    if (!array_has($content, 'status_code')) {
                        $content['status_code'] = $response->getStatusCode() * 100;
                    }
                    if (!array_has($content, 'message')) {
                        $content['message'] = '成功!';
                    }
                    $response->setContent($content);
                }
            }
            return $response;
        } catch (\Exception $exception) {
            $code = ($exception instanceof \Symfony\Component\HttpKernel\Exception\HttpExceptionInterface) ? $exception->getStatusCode() : 500;
            return new \Illuminate\Http\JsonResponse([
                'data' => [
                    'message' => $exception->getMessage(),
                ],
                'message' => $exception->getMessage(),
                'status_code' => (int)($code * 100),
            ]);
        }
    
    }
  • React SimpleMDE Markdown Editor at 1个月前

    @zhangzijian markdown 图片就是这种格式的,你可以点击预览看效果。
    还有 jsonFieldName 这个字段得根据你 uploadUrl 响应的数据结构来设置

  • PHP 百万级数据导出方案(多 CSV 文件压缩) at 4个月前

    @iven-token 游标不会的

  • Laravel at 4个月前

    DB::statement('sql')

  • request 获取请求参数时字段尾部的空格或者回车获取不到? at 4个月前

    编辑 app/Http/Kernel.php 文件,去掉 \App\Http\Middleware\TrimStrings::class, 中间件,或者编辑 app/Http/Middleware/TrimStrings.php 文件,在 $except 属性里面添加排除字段就可以了。

  • 如何权衡 Blade 和 VueJS ? at 4个月前

    如果不考虑 seo 的话,我是更倾向于前后分离,这样开发效率高而且代码结构也比较清晰

  • PHP fastcgi 端口配置为 9000 为何不行? at 4个月前

    @phpero 你是不是没开启 nginx 错误日志?

  • PHP fastcgi 端口配置为 9000 为何不行? at 4个月前

    开启日志然后分析下日志

  • 5.6 如何设置按日期记录日志呢? at 4个月前

    修改 .env 文件 LOG_CHANNEL=daily 就可以了

  • Request 实例注入问题 at 4个月前

    Illuminate\Routing\ControllerDispatcher 这个类的 dispatch 方法注入的,有个简单办法,用 xdebug 追踪下就行了

  • 社区文档新增查看 Markdown 文本功能 at 5个月前

    之前点改进也可以查看

  • 关于 file 缓存,偶尔出现 file_put_contents () error 的疑惑 at 5个月前

    @shuaili 我刚测试了一下,你这个和 上传文件超过 php 文件上传大小限制的 错误提示好像确实不一样

    file

    不过我把限制调大了就可以了

    file

  • 如何修改时区? at 5个月前

    出现这种情况是你的数据库时区和你系统时区不一致导致的,你可以修改数据库时区,也可以修改 app/database.php 配置

    return [
      'connections' => [
        'mysql' => [
          'timezone' => '+08:00',
        ],
      ],
    ],
  • 关于 file 缓存,偶尔出现 file_put_contents () error 的疑惑 at 5个月前

    有可能是上传文件超过 php 文件上传大小限制,你改大点试试

  • Dingo API 请求接口 404? at 5个月前

    @zhu106878723 错误信息不是写的很清楚吗

  • 引入辅助函数后缓存报错问题该如何解决? at 5个月前
    if (!function_exists('route_class')) {
        function route_class() {
            ...
        }
    }