Laravel 使用 Pipeline 实现 AOP(我不太清楚是否真属于 AOP 我也是一知半解,如有误请指正!) 作者: Chuwen 时间: 2022-05-05 分类: PHP 评论 ### 参考链接: 1. https://learnku.com/laravel/t/7543/pipeline-pipeline-design-paradigm-in-laravel 2. https://learnku.com/articles/44435 gist : https://gist.github.com/PrintNow/cbfe2db1b809bf72328a97ad9bd4449b --- ```php send($input) ->through([ RemoveBadWords::class, ReplaceWords::class, ]) ->then(function ($content) { return $content; }); echo "最终处理结果:$output"; ``` ## 运行结果 ![](https://cdn.nowtime.cc/2022/05/05/2571709060.png)
Larvel + Vue 项目使用 Docker 作者: Chuwen 时间: 2021-12-28 分类: Docker 评论 先给出配置文件,有空了再慢慢说道 ### Dockerfile: ```dockerfile FROM node:12-alpine as frontend WORKDIR /app ADD web-vue/package.json /app/ ADD web-vue/package-lock.json /app/ RUN npm install --registry=https://registry.npm.taobao.org ADD web-vue /app RUN npm run build # 第 1 个阶段,构建 composer 所需要的依赖包 FROM composer as composer COPY database/ /app/database/ COPY composer.json /app/ RUN set -x ; cd /app \ && composer config -g repo.packagist composer https://mirrors.aliyun.com/composer/ \ && composer install \ --ignore-platform-reqs \ --no-interaction \ --no-plugins \ --no-scripts \ --prefer-dist # 第 2 个阶段 FROM shine09/php-fpm:73 as laravel ENV TZ="Asia/Shanghai" LANG="C.UTF-8" ARG LARAVEL_PATH=/app/laravel COPY --from=composer /app/vendor/ ${LARAVEL_PATH}/vendor/ COPY . ${LARAVEL_PATH} RUN set -x ; cd ${LARAVEL_PATH} \ && mv .env.docker .env \ && mkdir -p storage \ && mkdir -p storage/framework/cache \ && mkdir -p storage/framework/sessions \ && mkdir -p storage/framework/testing \ && mkdir -p storage/framework/views \ && mkdir -p storage/logs \ && chmod -R 777 storage \ && chmod -R 777 bootstrap/cache/ \ && php artisan package:discover # 第 3 个阶段 FROM nginx:alpine as nginx ENV TZ="Asia/Shanghai" LANG="C.UTF-8" ARG LARAVEL_PATH=/app/laravel COPY laravel.conf /etc/nginx/conf.d/ COPY --from=laravel ${LARAVEL_PATH}/public ${LARAVEL_PATH}/public COPY --from=frontend /app/net /app/frontend ``` ### docker-compose.yaml: ```yaml version: "3.7" services: php: build: context: . dockerfile: Dockerfile target: laravel container_name: project_app_server restart: always networks: - project_app nginx: build: context: . dockerfile: Dockerfile target: nginx container_name: project_app depends_on: - php ports: - "8092:80" networks: - project_app volumes: - ./logs/:/app/logs/ networks: project_app: driver: bridge name: project_app ``` ### laravel.conf: ```conf server { listen 80; server_name app.nowtime.cc; root /app/laravel/public; index index.php index.html; access_log /app/logs/$host.log; error_log /app/logs/$host.error.log; location / { try_files $uri $uri/ /index.php?$query_string; } location ^~ /app { alias /app/frontend; index index.html; try_files $uri $uri/ /app/index.html; } location ~ .*\.php(\/.*)*$ { fastcgi_pass project_app_server:9000; include fastcgi.conf; fastcgi_connect_timeout 10; fastcgi_send_timeout 10; fastcgi_read_timeout 10; } } ```
Laravel Mix 判断是否为生产环境 作者: Chuwen 时间: 2021-12-22 分类: Laravel 评论 有这么个需求,需要在一些静态文件带上 hash 参数,解决 CDN 缓存问题,但是在网上找的用这个 `mix.config.production` 是会报错的 然后自己打印 `mix` 发现了一个 `inProduction()` 方法,验证了下,这个确实是判断是否为生产环境的 #### 修改项目根目录下 webpack.mix.js ```js const mix = require('laravel-mix'); mix.js('resources/js/app.js', 'public/js') .postCss('resources/css/app.css', 'public/css', [ require("tailwindcss"), ]); if (mix.inProduction()) mix.version(); ``` #### 然后看 /public/mix-manifest.json 会发现内容是这样的 ```json { "/js/app.js": "/js/app.js?id=33663d66c33666962f26", "/css/app.css": "/css/app.css?id=7066f8a66603866e666" } ``` #### 只要你保证在你的 blade 模版里面使用如 `mix('js/app.js')` 这样引用的就没有问题 ```blade @yield('title') @yield('content') ``` #### 最终生成的代码是类似 `` 这样的
Composer install/require/update 忽略内存限制 作者: Chuwen 时间: 2021-10-25 分类: PHP 评论 ```shell php -d memory_limit=-1 /usr/local/bin/composer update --no-dev ```
Laravl 在 Mailer 类里获取渲染后的模版内容 作者: Chuwen 时间: 2021-10-21 分类: Laravel,PHP 评论 ## 序言 因为在项目中需要保存下发送的邮件内容,以便后续查看 ## 代码 通过以下代码就会获取到: ```php return Container::getInstance()->make('mailer')->render( $this->buildView(), $this->buildViewData() ); ``` 完整代码实例: ```php queue = 'account-send-email'; } /** * Build the message. * * @return $this */ public function build(): static { // 存放你的逻辑代码 return $this->view('emails.account.insufficient_quota_reminder'); } /** * 处理任务成功 * * @param \Illuminate\Contracts\Mail\Factory|\Illuminate\Contracts\Mail\Mailer $mailer */ public function send($mailer) { parent::send($mailer); $model = MailSendLog::whereId($this->mailSendLogId)->first(); if (is_null($model)) return; try { $model->content = $this->getRender(); } catch (BindingResolutionException | ReflectionException) { } $model->status = 1;//发送成功 $model->save(); } /** * 处理任务失败。 * * @param \Throwable $exception * * @return void */ public function failed(Throwable $exception) { $model = MailSendLog::whereId($this->mailSendLogId)->first(); if (is_null($model)) return; try { $model->content = $this->render(); } catch (ReflectionException) { } $model->exception = $exception->getMessage(); $model->status = 2;//发送失败 $model->save(); } /** * 获取渲染后的邮件模版 * * @return string * @throws \Illuminate\Contracts\Container\BindingResolutionException * @throws \ReflectionException */ private function getRender(): string { return Container::getInstance()->make('mailer')->render( $this->buildView(), $this->buildViewData() ); } } ```