我对这个话题的第10000000个问题表示道歉,但我无法按照我想要的方式工作.
我正在写一个简单的php mvc'ish框架.我希望这个框架能够安装在任何目录中.
我的PHP脚本的作用:抓住请求uri并将其分解为段.使段1成为控制器,段2成为动作.当我这样做时,这一切都很好:
http://www.domain.com/mvc/module/test/
它将转到特定的模块控制器和方法.现在我有一个默认控制器,即家庭控制器,它位于文件夹中.
现在当我直接访问这个文件夹 http://www.domain.com/mvc/home/ 它会显示403禁止,因为这个文件夹确实存在,相反它也应该回到 http://www.domain.com /mvc/index.php
如果我将框架安装在不同的文件夹中,让我们说文件夹框架,它必须重定向回http://www.domain.com/framework/index.php
我想将每个文件夹和php文件重定向回index.php,保留其他所有内容.
我遇到的第一个问题是它永远不会重定向到正确的文件夹,总是重定向到域根文件夹.
这是我试过的:
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule . index.php [L]
Run Code Online (Sandbox Code Playgroud)
我真的希望有人可以帮助我或指出我正确的方向!
非常感谢!!
我在Laravel 5中创建了一个视图作曲家.当我使用通配符*时,为我的所有视图添加一些东西,它被称为至少两次.它在我的主模板加载时运行,并在包含我的内容页面时再次运行.这将在将来产生问题,因为它会多次执行查询.我能够通过将其存储在静态变量中来修复多重查询:
class StoreComposer {
static $composed;
public function __construct(StoreRepository $repository)
{
$this->store = $repository;
}
public function compose(View $view)
{
if(static::$composed)
{
return $view->with('store', static::$composed);
}
static::$composed = $this->store->pushCriteria( new WithCategories() )
->pushCriteria( new WithSettings() )
->applyCriteria()
->all();
$view->with('store', static::$composed);
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,有没有办法确保它只运行一次,无论我加载了多少视图,还是有另一种解决方案?我现在修理它的方式对我来说并不合适.谢谢!
我正在尝试学习Angular 2,经过大量的错误消息后我终于得到了路线工作,我可以显示我想要的组件.现在我想显示我的主页组件,我希望这个组件中有一个导航栏组件.
Home.ts:
import {Component, View} from 'angular2/core';
import {Navbar} from './navbar/navbar'
@Component({
selector: 'home'
})
@View({
templateUrl: '/app/home/home.html'
})
export class Home {
constructor:(public navbar: Navbar) {
}
}
Run Code Online (Sandbox Code Playgroud)
home.html的:
<p>NICE!</p>
<navbar></navbar>
Run Code Online (Sandbox Code Playgroud)
navbar.ts:
import {Component, View} from 'angular2/core';
@Component({
selector: 'navbar'
})
@View({
template: `
<ul>
<li>This is the navbar</li>
</ul>
`
})
export class Navbar{
}
Run Code Online (Sandbox Code Playgroud)
主页正在显示,但标签只<navbar></navbar>在我检查时停留.我究竟做错了什么?
我有以下表结构:
| products | product_options | product_option_values | product_option_to_product |
+----------+-----------------+-----------------------+---------------------------+
| id | id | id | id |
| | | | product_id |
| | | | product_option_id |
| | | | product_option_value_id |
Run Code Online (Sandbox Code Playgroud)
我的关系看起来像这样:
// Product.php
public function options()
{
return $this->belongsToMany('App\ProductOption', 'product_option_to_product', 'product_id', 'product_option_id')->withPivot('product_option_value_id', 'product_id');
}
// ProductOption.php
public function values()
{
return $this->belongsToMany('App\ProductOptionValue', 'product_option_to_product', 'product_option_id', 'product_option_value_id')->withPivot('product_id');
}
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试这个:
$products = Product::with('options')->with('options.values')->first();
Run Code Online (Sandbox Code Playgroud)
要么
$products = Product::with('options.values')->first();
Run Code Online (Sandbox Code Playgroud)
我得到所有选项可能的值,因为它不使用产品ID来加载选项值.
有谁知道我怎么能确保它只加载属于该产品的值?
我可以在产品上直接与选项值建立关系,但我确实需要将它们附加到它们所属的选项上.
编辑:
我尝试了这样的连接:
$products = Product::with(['options.values' …Run Code Online (Sandbox Code Playgroud) 我有以下代码:
echo 'First try: <br />';
$input = Session::get('input');
pre($input, false);
echo 'Second try: <br />';
Session::put('input', 'test');
pre(Session::get('input'));
Run Code Online (Sandbox Code Playgroud)
它在第一次加载时给出以下输出:
First try:
Second try:
test
Run Code Online (Sandbox Code Playgroud)
这是第一次预期的,但是当我重新加载页面时,我得到完全相同的输出。所有数据都在刷新后只是丢失。
我知道它不是闪存数据,但我不知道为什么它不存储数据。我在 Windows 上使用基于文件的会话和 Xampp(使用 artisan serve 时也会发生同样的情况)。
存储文件夹是可写的。
编辑:刚刚尝试使用数据库会话,结果相同。而且我直接在路由文件中执行此操作,因此没有其他代码可以将其弄乱。
前置功能:
function pre( $data , $kill = true)
{
echo '<pre>'.print_r($data,true).'</pre>';
if($kill){
exit;
}
Run Code Online (Sandbox Code Playgroud) 我试图在我的注册表单中添加验证码.除了会话变量总是为空之外,图像渲染得很好,所以它根本不起作用.
我使用以下课程:http://www.ejeliot.com/pages/php-captcha
根据文档,我不得不制作一个包含以下内容的php文件:
<?php
require('classes/PhpCaptcha.php');
$aFonts = array('fonts/VeraBd.ttf', 'fonts/VeraIt.ttf', 'fonts/Vera.ttf');
$oVisualCaptcha = new PhpCaptcha($aFonts, 200, 60);
$oVisualCaptcha->SetBackgroundImages('captchaimgbg.jpg');
$oVisualCaptcha->Create();
?>
Run Code Online (Sandbox Code Playgroud)
并将其作为图像包含在内.
现在我调查了Create(); 函数,在这个函数中另一个名为GenerateCode()的函数; 被调用,负责生成字母并将其放入会话变量中.
代码如下:
function GenerateCode() {
// reset code
$this->sCode = '';
// loop through and generate the code letter by letter
for ($i = 0; $i < $this->iNumChars; $i++) {
if (count($this->aCharSet) > 0) {
// select random character and add to code string
$this->sCode .= $this->aCharSet[array_rand($this->aCharSet)];
} else {
// select random character and …Run Code Online (Sandbox Code Playgroud) 我正在编写一个脚本,我可以检查权限和内容,我偶然发现了一些奇怪的东西.
我的权限脚本可以检查系统和功能,并查看是否允许用户使用m.
我将用一些代码解释:
if(permission::check('factbounce', 'magklik')){
echo ' Yep good ';
} else {
echo 'Nope not good';
}
Run Code Online (Sandbox Code Playgroud)
这里我有一个系统factbounce和一个函数magklik,现在在权限类中:
public static function check($systemCode, $functionCode = null ){
$instance = self::get();
if($instance->checkSystem($systemCode)){
if(is_null($functionCode))
return true;
if(!$instance->checkSystemFunction($functionCode))
return false;
return true;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
这段代码将触发checkSystemFunction,并将检查magklik:
private function checkSystemFunction ( $functionCode ){
if(!self::$oSystemFunction)
self::$oSystemFunction = org_system_function::getByCode($functionCode);
if(!is_object(self::$oSystemFunction));
echo 'No Object';
echo '<pre>'.print_r(self::$oSystemFunction, true).'</pre>';
if(!self::$oSystemPermission->checkFunctionPermission(self::$oMedewerker, self::$oSystemFunction))
return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
代码的输出是这样的:
No Object
org_system_function Object
(
[primaryKey] => org_system_function_id
[table] …Run Code Online (Sandbox Code Playgroud)