在Mac开发环境Laravel Valet中配置运行Flarum论坛系统的方法详解

下面由laravel教程栏目给大家介绍在 mac 开发环境 laravel valet 中配置运行 flarum 论坛系统的实现方法,希望对需要的朋友有所帮助!

在Mac开发环境Laravel Valet中配置运行Flarum论坛系统的方法详解

Laravel Valet 是为Mac OS X提供的极简开发环境,但是,Valet的配置和传统的http服务器(apachenginx等)有些区别,不同于在配置文件中重写URL,Valet通过在php类中使用一种模块化方式定义URL处理。由于Flarum和Laravel默认目录结构不同,所以我们需要在Valet定义其访问配置。

在~/.valet/Drivers目录下有个默认的配置文件SampleValetDriver.php,其中包含了三个方法:serves,isStaticFile 和 frontControllerPath。我们现在要配置一个自己的配置文件FlarumValetDriver.php,仿照这三个方法编写自己的驱动扩展:

cp SampleValetDriver.php FlarumValetDriver.php

打开FlarumValetDriver.php,首先重写serves方法,在该方法中我们要指定Valet对应Web根目录下对应的Flarum应用目录(我这里是flarum,如果不一样需要修改为你自己的Flarum应用目录)是否存在,这有点类似Nginx中定义root:

public function serves($sitePath, $siteName, $uri){     return is_dir($sitePath.'/vendor/flarum')         && file_exists($sitePath.'/flarum'); }

接下来在isStaticFile方法中判断给定URL是否指向静态文件,并且静态文件确实存在,这类似于我们在nginx中定义静态文件访问:

public function isStaticFile($sitePath, $siteName, $uri){     if ($this->isActualFile($staticFilePath = $sitePath.$uri)) {         return $staticFilePath;     }      return false; }

最后重写frontControllerPath方法,该方法类似Apache中的mod_rewrite和Nginx中的try_uri,在这里我们可以重写请求访问路径:

public function frontControllerPath($sitePath, $siteName, $uri) {     if (strpos($uri,'/admin') === 0) {         return $sitePath.'/admin.php';     }     if (strpos($uri,'/api') === 0) {         return $sitePath.'/api.php';     }      return $sitePath.'/index.php'; }

最终结果如下所示,我们将其保存到~/.valet/Drivers下:

<?php class FlarumValetDriver extends ValetDriver {     /**      * Determine if the driver serves the request.      *      * @param  string  $sitePath      * @param  string  $siteName      * @param  string  $uri      *      * @return bool      */     public function serves($sitePath, $siteName, $uri)     {         return is_dir($sitePath.&#39;/vendor/flarum&#39;) && file_exists($sitePath.&#39;/flarum&#39;);     }      /**      * Determine if the incoming request is for a static file.      *      * @param  string  $sitePath      * @param  string  $siteName      * @param  string  $uri      *      * @return string|false      */     public function isStaticFile($sitePath, $siteName, $uri)     {         if ($this->isActualFile($staticFilePath = $sitePath.$uri)) {             return $staticFilePath;         }         return false;     }      /**      * Get the fully resolved path to the application's front controller.      *      * @param  string  $sitePath      * @param  string  $siteName      * @param  string  $uri      *      * @return string      */     public function frontControllerPath($sitePath, $siteName, $uri)     {         if (strpos($uri,'/admin') === 0) {             return $sitePath.'/admin.php';         }         if (strpos($uri,'/api') === 0) {             return $sitePath.'/api.php';         }          return $sitePath.'/index.php';     } }

这样就可以正常访问Falrum的所有路由了。如果访问报错:

Call to undefined method FlarumValetDriver::isActualFile() in /Users/sunqiang/.valet/Drivers/FlarumValetDriver.php on line 29

这是因为Valet未升级到最新版本,执行以下命令升级Valet即可:

composer global update

原文地址:https://xueyuanjun.com/post/5679

© 版权声明
THE END
喜欢就支持一下吧
点赞6 分享