• 技术文章 >php框架 >Laravel

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

    藏色散人藏色散人2020-04-28 15:03:50转载822
    下面由laravel教程栏目给大家介绍在 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

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

    以上就是在Mac开发环境Laravel Valet中配置运行Flarum论坛系统的方法详解的详细内容,更多请关注php中文网其它相关文章!

    声明:本文转载于:xueyuanjun,如有侵犯,请联系admin@php.cn删除
    专题推荐:Laravel
    上一篇:laravel单文件、多文件上传的实现方法 下一篇:基于Laravel开发的在线点播系统MeEdu
    大前端线上培训班

    相关文章推荐

    • 【Voten】基于Laravel实现的类似Reddit的实时社交论坛系统• PHP开发者如何做好密码保护以及Laravel底层密码存储和验证实现• 关于Laravel5.4 Vuejs编译失败的问题处理• laravel单文件、多文件上传的实现方法

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网