解决Laravel自定义类引入和命名空间的问题
1.问题描述
在Laravel中引入了一个第三方验证码类Code.class.php,在使用的时候发现如果不给这个类设置命名空间,那么需要在使用时用require引入这个文件,引入后在
new Code()时会报Class 'App\Http\Controllers\Admin\Code' not found,即找不这个类的错误,发现系统在当前文件的命名空间去找这个类。所以需要在new时类名前加\,即new \Code(),这样会在根命名空间下找Code类就可以正常使用。
好奇心下给Code类添加了个命名空间namespace resources\org\code;,发现在使用时use resources\org\code\Code;,依然报错找不到这个类。
2.解决过程
通过修改命名空间,改变类文件存放位置,都不能解决这个错误,百度后发现应该自定义类的加载问题,即命名空间使用正确,但是laravel没有加载这个类文件。最后在csdn大神博客发现解决办法。
在composer.json的autoload内的classmap项新增类包,
"autoload": { "classmap": [ "database", "resources/org/code"//添加自己的命名空间 ], "psr-4": { "App\\": "app/" } },
完成之后还需要在命令行使用composer命令
composer dump-autoload
做完这些再回到项目中,在使用Code类的文件中use resources\org\code\Code;就可以正确的new Code()了。
3.总结
在自定义类不使用命名空间时可以直接require类文件进行使用,但在new \Code时要加上\指明根命名空间。
当使用命名空间时要进行配置,告诉系统进行自动加载自定义类包,然后可以使用use。
另外经过测试发现当使用命名空间时仅使用require仍然报错,还要指明命名空间才可以。但使用了use可以省去require。
以上这篇解决Laravel自定义类引入和命名空间的问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
Laravel基础-关于引入公共文件的两种方式
(1).首先在app\Http\routes.php中定义路由: Route::get('view','ViewController@view'); Route::get('article','ViewController@article'); Route::get('layout','ViewController@layout'); (2).然后在Http\Controllers\ViewController.php中写入方法: public function view(){ return v
-
Laravel最佳分割路由文件(routes.php)的方式
前言 Laravel 的路由功能很强大,默认都是定义在 routes.php 文件中,随着项目越来越大,我们需要的定义的路由越来越多,想象一下,如果几百上千个路由都定义在一个文件中,如何去维护?也许还有不同的人都在同一个文件定义路由,这就造成了冲突,因此我们需要分割 routes.php 文件. 下面介绍一种很优雅的方式. 在 app/Providers/RouteServiceProvider.php 的 map 方法中可以如下定义: public function map(Router $r
-
laravel 修改.htaccess文件 重定向public的解决方法
笔者遇到此问题后多次都锁无果. 以下为我从网上搜索到的方法 -把server.php 重命名为index.php 并将.htaccess文件从public复制到根目录 但本方法会造成asset函数关联错误 经笔者多次尝试,提供一种新的方法 希望能够帮助其他与我遇到相同问题的人 解决方案如下: 1.将public/.htaccess文件拷贝一份在根目录 2.更改 RewriteCond %{REQUEST_FILENAME} !-d RewriteCond %{REQUEST_FILENAME}
-
解决Laravel自定义类引入和命名空间的问题
1.问题描述 在Laravel中引入了一个第三方验证码类Code.class.php,在使用的时候发现如果不给这个类设置命名空间,那么需要在使用时用require引入这个文件,引入后在 new Code()时会报Class 'App\Http\Controllers\Admin\Code' not found,即找不这个类的错误,发现系统在当前文件的命名空间去找这个类.所以需要在new时类名前加\,即new \Code(),这样会在根命名空间下找Code类就可以正常使用. 好奇心下给Code类添
-
使用Android studio创建的AIDL编译时找不到自定义类的解决办法
使用AS创建ADIL文件时AS会在main文件夹下给我们生成一个aidl文件夹和一个相同包名的包,通常我们会把所有和ADIL相关的类或文件放在这个包下,但是如果存在自定义的类时,程序编译时无法通过,提示找不到自定义的包.解决办法如下,在启动Module的build.gradle中加入如下代码: sourceSets { main { manifest.srcFile 'src/main/AndroidManifest.xml' java.srcDirs = ['src/main/java', '
-
thinkPHP自定义类实现方法详解
本文实例讲述了thinkPHP自定义类实现方法.分享给大家供大家参考,具体如下: 1.通过Model调用 <?php /** * 积分模型 api接口 */ class ApiModel{ private $url = 'http://js.yunlutong.com/Customer/Interface'; public function test() { $post_data['action'] = 'sadf'; $post_data['callback'] = '?'; $res = r
-
ThinkPHP5.0框架控制器继承基类和自定义类示例
本文实例讲述了ThinkPHP5.0框架控制器继承基类和自定义类.分享给大家供大家参考,具体如下: 继承系统控制器基类: <?php namespace app\index\controller; use think\Controller; class Index extends Controller { public function hello() { return 'hello,world'; } } 或者自定义一个基础控制器类Base: <?php namespace app\inde
-
Springboot解决ajax+自定义headers的跨域请求问题
1.什么是跨域 由于浏览器同源策略(同源策略,它是由Netscape提出的一个著名的安全策略.现在所有支持JavaScript 的浏览器都会使用这个策略.所谓同源是指,域名,协议,端口相同.),凡是发送请求url的协议.域名.端口三者之间任意一与当前页面地址不同即为跨域. 具体可以查看下表: 2.springboot如何解决跨域问题 1.普通跨域请求解决方案: ①请求接口添加注解@CrossOrigin(origins = "http://127.0.0.1:8020", maxAge
-
Laravel自定义 封装便捷返回Json数据格式的引用方法
一般返回数据格式 return response()->json(['status' => 'success','code' => 200,'message' => '关注成功']); return response()->json(['status' => 'fail','code' => 500,'error' => '关注失败',]); 基类控制器 <?php namespace App\Http\Controllers; use Illumin
-
解决Laravel 不能创建 migration 的问题
在 Laravel 项目中,由于测试,有时候用 php artisan make:migration create_xxx_table 创建数据库迁移.如果把创建的迁移文件 database/migrations/2016_09_13_081736_create_xxx_table.php 文件给删除了,再次执行 php artisan make:migration create_xxx_table 会报错: [ErrorException] include(/data/wwwroot/tj.c
-
解决vue自定义全局消息框组件问题
1.发现问题 在进行移动端适配的时候,为了在各个型号的设备上能够更好的提现结构排版,决定采用rem布局.采用rem布局的时候html的字体font-size是有一个标准的.我这边用的是750px的设计稿,就采用1rem = 100px. 在使用的过程中会用到一些第三方UI组件,而第三方UI组件是以px单位为标准的. 使用时发现:本来应该细长的提示语句变得很大! 最后发现可能是因为这个icon是继承了html设定的font-size,尝试加一些样式上去还是无效.(如果rem布局上有直接更改第三方组
-
Android Studio 中aidl的自定义类的使用详解
自己折腾了好久,记录一下. service端: 1:创建类Dog,需要实现Parcelable接口: 2:aidl下创建 Dog.aidl,里面两句话就可以了 (1)package s包名; (2)parcelable Dog; 3:interface.aidl引入Dog类, import s包名.Dog; Client 端: 1:创建类Dog,需要实现Parcelable接口: 2:aidl下创建 Dog.aidl, (1)package c包名; (2)parcelable Dog; 注意:
-
解决Keras 自定义层时遇到版本的问题
在2.2.0版本前, from keras import backend as K from keras.engine.topology import Layer class MyLayer(Layer): def __init__(self, output_dim, **kwargs): self.output_dim = output_dim super(MyLayer, self).__init__(**kwargs) def build(self, input_shape): # 为该层
随机推荐
- Ajax请求在数据量大的时候出现超时的解决方法
- SpringBoot整合MyBatis逆向工程及 MyBatis通用Mapper实例详解
- 解决报错ora-32035的方法分析
- C# Winform 实现屏蔽键盘的win和alt+F4的实现代码
- PHP学习笔记(二):变量详解
- C++实现一个线程安全的单例工厂实现代码
- android使用AsyncTask实现多线程下载实例
- 完美解决mysql客户端授权后连接失败的问题
- 图文解析AJAX的原理
- jQuery表单获取和失去焦点输入框提示效果的实例代码
- JSP由浅入深(2)—— 第一个JSP
- 阿里云ecs服务器 修改php上传最大限制的方法
- 简单总结C语言中的运算符优先级
- ngin配置301重定向设置方法和nginx子目录301重定向
- Python导入模块时遇到的错误分析
- sql语句优化的一般步骤详解
- jQuery 淡入淡出 png图在ie8下有黑色边框的解决方法
- Jquery轮播效果实现过程解析
- 使用jquery+CSS实现控制打印样式
- vue.js初学入门教程(2)