欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-05-04 10:59:17
Laravel Valet 是为Mac OS X提供的极简开发环境,但是,Valet的配置和传统的HTTP服务器(Apache、Nginx等)有些区别,不同于在配置文件中重写URL,Valet通过在PHP类中使用一种模块化方式定义URL处理。由于Flarum和Laravel默认目录结构不同,所以我们 ......

laravel valet 是为mac os x提供的极简开发环境,但是,valet的配置和传统的http服务器(apache、nginx等)有些区别,不同于在配置文件中重写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.'/vendor/flarum') && file_exists($sitepath.'/flarum');
 }
 
 /**
 * 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 

  

以上就是在mac开发环境laravel valet中配置运行flarum论坛系统的方法详解的详细内容