标签: codeigniter-4

如何在 codeigniter 4 中加载 css 或 js 文件?

当我尝试加载 css 或 javascript 文件时,它返回 404 错误。

我尝试使用诸如 HTML helper 的 link_tag、URL helper 的 base_url 方法之类的帮助程序,它会生成指向文件的路由,但无法加载。

这是我的控制器:

class Pages extends Controller{

    public function viewPage($page)
    {
        if(!is_file(APPPATH."/views/pages/$page.php")){
            throw new \CodeIgniter\Exceptions\PageNotFoundException($page);
        }

        helper('html');

        $data['title'] = $page == 'noticeboard' ? "page1" : "page2";

        if($page != "index"){
            echo view('templates/header', $data);
        }

        echo view("pages/$page", $data);

        if($page != "index"){
            echo view("templates/footer", $data);
        }
    }

}
Run Code Online (Sandbox Code Playgroud)

我的路由器:

$routes->get("/", "Pages::viewPage/index");
Run Code Online (Sandbox Code Playgroud)

HTML 中的标题:

<?=link_tag('public/css/style.css')?>
Run Code Online (Sandbox Code Playgroud)

资产文件夹位于 htdocs 的根目录中(我使用的是 xampp apache 服务器)。

当我尝试加载 CSS 或 JS 时,出现此错误:

错误信息

我对 CodeIgniter 完全陌生,所以任何帮助都将不胜感激。

  • 目录结构: …

php codeigniter codeigniter-4

3
推荐指数
1
解决办法
2万
查看次数

如何在codeigniter 4中显示上传的图像

在Codeigniter 4中,如何显示上传的图片。是否需要给予任何许可?

当我检查检查元素并复制链接并粘贴到图像显示的浏览器上时,我在 CI4 项目中的可写/上传/头像中上传了图像。

    <pre>
        <img src="<?=WRITEPATH.$list->avatars?>" class="img-radius" alt="User- 
     Profile-Image">
        <img src="<?=base_url()?>/writable/<?=$list->avatars?>" class="img- 
    radius" alt="User-Profile-Image">
    </pre>
Run Code Online (Sandbox Code Playgroud)

请解释一下如何显示图像

codeigniter-4

3
推荐指数
1
解决办法
2万
查看次数

如何自定义 CodeIgniter 4 中未找到的 404 页面

我刚刚学习CodeIgniter 4框架。如何自定义我的 404 页面未找到?

php codeigniter codeigniter-4

3
推荐指数
1
解决办法
8751
查看次数

Codeigniter 4 中的 CORS 问题:对预检请求的响应未通过访问控制检查

我正在使用 Codeigniter 4 为 React 应用程序制作一个 api。在邮递员中一切正常,但是当我使用 axios 发出请求时(也尝试过 fetch),它会出现 CORS 错误

从源“ http://localhost: 3000 ”访问位于“http://localhost:8080/testpost”的XMLHttpRequest已被 CORS 策略阻止:对预检请求的响应未通过访问控制检查:无“访问控制” -Allow-Origin'标头存在于请求的资源上。

我尝试向基本控制器添加标头:

header('Access-Control-Allow-Origin: *');
header("Access-Control-Allow-Methods: POST,GET, OPTIONS");
header("Access-Control-Allow-Headers: *");
Run Code Online (Sandbox Code Playgroud)

现在,它可以很好地处理没有 JSON 正文的请求,但是当我发送 json 正文时,会发生相同的错误。

axios.post("http://localhost:8080/testpost", { data: "test" })
    .then((response) => {
        console.log(response);
    })
    .catch((err) => {
        console.log("error!!!");
    });
Run Code Online (Sandbox Code Playgroud)
// Routes.php
$routes->post('/testpost', 'Home::testPost');
Run Code Online (Sandbox Code Playgroud)
// Home Controller
public function testPost()
{
    return $this->response->setJSON('test response');
}
Run Code Online (Sandbox Code Playgroud)

感谢您的帮助

php reactjs axios codeigniter-4

3
推荐指数
1
解决办法
2万
查看次数

如何在ci4路由中传递任意数量的参数?

我试图找到一种解决方案来使用路由传递任意​​数量的参数。

举个例子,如果我的路线是

$routes->get('pages/section/widgets/(:num)/(:num)/(:num)', 'Section::widgets/$1/$2/$3');
Run Code Online (Sandbox Code Playgroud)

在这里我必须立即声明我传递的参数数量,即 3。

但是如果我不确定参数的数量,那么如何在 ci4 中传递它呢?我查看了文档并尝试了所有可能的占位符。但它不会按预期工作。

为了在 Laravel 中更加清晰,我们使用 -

Route::get('/{page?}', 'Frontend\HomeController@inside')->where('page', '.*');
Run Code Online (Sandbox Code Playgroud)

所以在 Laravel 中它接受所有参数并重定向到它各自的方法。

先感谢您。

php codeigniter codeigniter-4

3
推荐指数
1
解决办法
1790
查看次数

CodeIgniter 4 - 如何在视图中显示 Flashdata?

我正在将我的项目从 CodeIgniter 3 升级到 CodeIgniter 4,我试图在视图中显示 flashdata 消息,但不幸的是,我尝试的每种方法都会出现不同的错误。

在 CodeIgniter 3 中,我曾经这样调用:

<?php if ($this->session->flashdata('message')) : ?>
    <div class="alert alert-success alert-dismissible fade show" role="alert">
        <?php echo $this->session->flashdata('message'); ?>
        <button type="button" class="close" data-dismiss="alert" aria-label="Close"><span aria-hidden="true">&times;</span></button>
    </div>
<?php endif; ?>
Run Code Online (Sandbox Code Playgroud)

我在 CodeIgniter 4 中尝试相同的操作,但收到此错误:

ErrorException
Undefined property: CodeIgniter\View\View::$session
Run Code Online (Sandbox Code Playgroud)

谁能告诉我如何实现这一目标?提前致谢。

php codeigniter codeigniter-4

3
推荐指数
1
解决办法
2万
查看次数

在子域/文件夹上使用 .htaccess 重写规则删除 CI4 public/index.php

我有一个名为的子域test.mysite.com,并且在名为 project 的文件夹内安装了 CI4。所以 CI4 安装的实际 url 是test.mysite.com/project/public/index.php。我想从 URL 中删除 public/index.php 部分,但继续使用 public 文件夹来保存我的文件,因为它们应该这样做。

我在项目文件夹根目录上使用这个 .htaccess:

DirectoryIndex /public/index.php
RewriteEngine on
RewriteCond $1 !^(index\.php|images|assets|css|js|robots\.txt|favicon\.ico)
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ ./public/index.php/$1 [L]

<IfModule mod_headers.c>
  <FilesMatch "\.(ttf|ttc|otf|eot|woff|woff2|font.css|css|js)$">
    Header set Access-Control-Allow-Origin "*"
  </FilesMatch>
</IfModule>
Run Code Online (Sandbox Code Playgroud)

但这不起作用。当我访问 test.mysite.com/project 时,它会将我带到服务器文件列表。我知道 .htaccess 文件正在被正确读取,因为当我在那里添加错误时,它会给我一个警告

编辑: CI4 已经在公共文件夹中附带了一个 htaccess:

# Disable directory browsing
Options All -Indexes

<IfModule mod_rewrite.c>
    Options +FollowSymlinks
    RewriteEngine On

    # If you installed CodeIgniter in a subfolder, you will need …
Run Code Online (Sandbox Code Playgroud)

.htaccess codeigniter codeigniter-4

3
推荐指数
1
解决办法
9045
查看次数

CodeIgniter 4 项目中未定义的常量“CodeIgniter\Database\MySQLi\MYSQLI_STORE_RESULT”

我已经使用 Composer 安装了 CodeIgniter 项目 (4.1.5)。我在 PHP 8.0.12 上运行它

\n

当我尝试与数据库通信时,出现内部服务器错误 500,日志消息如下:

\n
CRITICAL - 2021-11-13 01:39:18 --> Undefined constant "CodeIgniter\\Database\\MySQLi\\MYSQLI_STORE_RESULT"\n#0 D:\\Sites\\ea4\\vendor\\codeigniter4\\framework\\system\\Database\\Database.php(56): CodeIgniter\\Database\\Database->initDriver('MySQLi', 'CodeIgniter\\\\Dat...', Array)\n#1 D:\\Sites\\ea4\\vendor\\codeigniter4\\framework\\system\\Database\\Config.php(78): CodeIgniter\\Database\\Database->load(Array, 'default')\n#2 D:\\Sites\\ea4\\vendor\\codeigniter4\\framework\\system\\Model.php(97): CodeIgniter\\Database\\Config::connect('default')\n#3 D:\\Sites\\ea4\\app\\Controllers\\Backend\\Home.php(33): CodeIgniter\\Model->__construct()\n#4 D:\\Sites\\ea4\\vendor\\codeigniter4\\framework\\system\\CodeIgniter.php(824): App\\Controllers\\Backend\\Home->index()\n#5 D:\\Sites\\ea4\\vendor\\codeigniter4\\framework\\system\\CodeIgniter.php(410): CodeIgniter\\CodeIgniter->runController(Object(App\\Controllers\\Backend\\Home))\n#6 D:\\Sites\\ea4\\vendor\\codeigniter4\\framework\\system\\CodeIgniter.php(318): CodeIgniter\\CodeIgniter->handleRequest(NULL, Object(Config\\Cache), false)\n#7 D:\\Sites\\ea4\\public\\index.php(37): CodeIgniter\\CodeIgniter->run()\n
Run Code Online (Sandbox Code Playgroud)\n

在家庭控制器中,我有以下代码:

\n
public function index()\n{\n    $session = session();\n    $data = [];\n    // Check for post\n    if ($this->request->getMethod() === 'post') {\n        // Validate the user input\n        if (!($this->validate([\n            'cmsuserEmail'      => ['label' => 'E-Mail',                'rules'   => 'required|min_length[6]|max_length[50]|valid_email'],\n            'cmsuserPassword'   => …
Run Code Online (Sandbox Code Playgroud)

php mysqli codeigniter codeigniter-4

3
推荐指数
1
解决办法
1万
查看次数

对于新的 Codeigniter 4 项目,出现错误“CodeIgniter\Cache\Exceptions\CacheException 缓存无法写入...”

几乎总是,当我启动 Codeigniter 4 项目时,我会收到以下错误:

"CodeIgniter\Cache\Exceptions\CacheException Cache unable to write to "/path/to/codeigniter-project/writable/cache/."

SYSTEMPATH/Cache/Handlers/FileHandler.php at line 61

Run Code Online (Sandbox Code Playgroud)

它指向下面一行:

throw CacheException::forUnableToWrite($this->path);
Run Code Online (Sandbox Code Playgroud)

缓存异常

解决这个问题的最佳方法是什么?

php error-handling codeigniter codeigniter-4

3
推荐指数
1
解决办法
1万
查看次数

在没有 Composer 的情况下安装 CodeIgniter 4 的 Shield

我喜欢使用 CodeIgniter,因为我不需要 Composer。但是,我正在尝试安装 CodeIgniter 的 Shield(CodeIgniter 4 的身份验证和授权),但我不知道如何在没有 Composer 的情况下安装它。

有可能吗?

codeigniter composer-php codeigniter-4

3
推荐指数
1
解决办法
841
查看次数