zoukankan      html  css  js  c++  java
  • 在Mac开发环境Laravel Valet中配置运行Flarum论坛系统的方法详解

    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论坛系统的方法详解的详细内容

  • 相关阅读:
    【java】对象赋值给另一个对象
    spring boot系列(五)spring boot 配置spring data jpa (查询方法)
    Spring Data JPA 查询
    Spring Data JPA 介绍
    OpenID简介
    OAUTH协议介绍
    URL encoding(URL编码)
    RESTful 介绍
    spring boot系列(四)spring boot 配置spring data jpa (保存修改删除方法)
    spring boot 启动报 java.lang.NoClassDefFoundError: ch/qos/logback/core/spi/LifeCycle 错误
  • 原文地址:https://www.cnblogs.com/a609251438/p/12801678.html
Copyright © 2011-2022 走看看