当我尝试加载 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 完全陌生,所以任何帮助都将不胜感激。
在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框架。如何自定义我的 404 页面未找到?
我正在使用 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)
感谢您的帮助
我试图找到一种解决方案来使用路由传递任意数量的参数。
举个例子,如果我的路线是
$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 中它接受所有参数并重定向到它各自的方法。
先感谢您。
我正在将我的项目从 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">×</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)
谁能告诉我如何实现这一目标?提前致谢。
我有一个名为的子域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) 我已经使用 Composer 安装了 CodeIgniter 项目 (4.1.5)。我在 PHP 8.0.12 上运行它
\n当我尝试与数据库通信时,出现内部服务器错误 500,日志消息如下:
\nCRITICAL - 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()\nRun Code Online (Sandbox Code Playgroud)\n在家庭控制器中,我有以下代码:
\npublic 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) 几乎总是,当我启动 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)
解决这个问题的最佳方法是什么?
我喜欢使用 CodeIgniter,因为我不需要 Composer。但是,我正在尝试安装 CodeIgniter 的 Shield(CodeIgniter 4 的身份验证和授权),但我不知道如何在没有 Composer 的情况下安装它。
有可能吗?
codeigniter-4 ×10
codeigniter ×8
php ×7
.htaccess ×1
axios ×1
composer-php ×1
mysqli ×1
reactjs ×1